2016-11-22 3 views
1

I-Verfahren mit Expression aufrufen, die in der Tabelle letzten Datensatz zurück:Anruf metthod mit Expression durch Reflexion

public T FindLast<TKey>(Expression<Func<T,TKey>> specification = null) 
{ 
    return specification == null 
     ? Set().LastOrDefault() 
     : Set().OrderBy(specification).LastOrDefault(); 
} 

durch Reflexion

var methodCreateReadRepositoryAttr = (entityMetadata.GetEntityAttributeType() != null) ? 
typeof(IRepositoryFactory).GetMethod("CreateReadRepository").MakeGenericMethod(entityMetadata.GetEntityAttributeType()) : null; 

    var methodEntityGet3 = attributeReadRepository.GetType().GetMethod("FindLast"); 
var closedGenericMethod = methodEntity3.MakeGenericMethod(new Type[] { typeof(Expression<Func<ArticleAttribute,int>>) }; 

Expression <Func<ArticleAttribute, int>> articleReturnExpression = e => e.ArticleAttributeID; 

var fromRepo3 = closedGenericMethod.Invoke(attributeReadRepository, new object[] {articleReturnExpression}); 

In der letzten Zeile habe ich Fehlermeldung

Objekt vom Typ 'System.Linq.Expressions.Expression 1[System.Func 2 [RRP.Framework.Domain.Entities.ArticleAttribute, System.I nt32]] 'kann nicht in den Typ' System.Linq.Expressions.Expression 1[System.Func 2 [RRP.Framework.Domain.Entities.ArticleAttribute, System.Linq.Expressions.Expression 1[System.Func 2 [RRP.Framework.Domain.Entities.ArticleAttribute] konvertiert werden. System.Int32]]]] '.

+0

sein Wie aus https://stackoverflow.com/questions/40737230/call-generic-method-with-expression-through-reflection dies anders ist? –

+0

Dies ist das nächste Problem, dass apear. Es tut uns leid! –

+2

Bitte geben Sie eine [mcve] an, damit Sie eine Antwort erhalten, die wir * zeigen * können. Es hilft niemandem, ein kleines Problem zu einem Zeitpunkt zu lösen, wenn wir mit einem vollständigen Beispiel eine vollständige Lösung geben können. –

Antwort

1

Sie mischen den generischen Argumenttyp mit dem Argumenttyp method.

Das einzige allgemeine Argument Ihrer Methode

public T FindLast<TKey>(Expression<Func<T,TKey>> specification = null) 

TKey ist. Daher

var closedGenericMethod = methodEntity3.MakeGenericMethod(
    new Type[] { typeof(Expression<Func<ArticleAttribute,int>>) }); 

sollte

var closedGenericMethod = methodEntity3.MakeGenericMethod(
    new Type[] { typeof(int) }); 
Verwandte Themen