2010-07-01 17 views
5

Ich habe einen Ausdruck im Format Expression<Func<T, T2, bool>>, die ich brauche auf das Format von Expression<Func<T2, bool>> in einen Ausdruck zu konvertieren, indem die T im ersten ersetzen Ausdruck mit einem konstanten Wert.Convert Expression <Func <T, T2, bool>> zu Expression <Func <T2, bool>> durch eine Konstante für T Einführung

Ich brauche das als Ausdruck zu bleiben, damit ich nicht einfach den Ausdruck mit einer Konstante als ersten Parameter aufrufen kann.

Ich habe mir die anderen Fragen hier über Expression Trees angeschaut, aber ich kann nicht wirklich eine Lösung für mein Problem finden. Ich vermute, dass ich den Ausdrucksbaum laufen muss, um die Konstante einzuführen und einen Parameter zu entfernen, aber ich weiß nicht einmal, wo ich im Moment anfangen soll. :(

Antwort

4

Sie können Expression.Invoke verwenden, um einen neuen Lambda-Ausdruck zu erstellen, die andere nennt.

static Expression<Func<T2, bool>> PartialApply<T, T2>(Expression<Func<T, T2, bool>> expr, T c) 
{ 
    var param = Expression.Parameter(typeof(T2), null); 
    return Expression.Lambda<Func<T2, bool>>(
     Expression.Invoke(expr, Expression.Constant(c), param), 
     param); 
} 
+0

funktioniert wie ein Charme, und ist viel einfacher als drei den gesamten Ausdruck zu Fuß Danke. –

Verwandte Themen