2011-10-02 6 views
5

mam orzecznika Expression<Func<T1, bool>>LINQ - Tworzenie Expression <T1> od Expression <T2>

muszę używać go jako orzecznik Expression<Func<T2, bool>> pomocą właściwości T1 z T2 starałem się myśleć o kilku approches, prawdopodobnie za pomocą Expression.Invoke ale couln; Obróć mi głowę.

Dla porównania:

class T2 { 
    public T1 T1; 
} 

I

Expression<Func<T1, bool>> ConvertPredicates(Expression<Func<T2, bool>> predicate) { 
    //what to do here... 
} 

dziękuję z góry.

Odpowiedz

7

Spróbuj znaleźć rozwiązanie za pomocą normalnych lambdas, zanim pomyślisz o drzewach ekspresji.

masz orzecznika

Func<T1, bool> p1 

i chcą orzecznika

Func<T2, bool> p2 = (x => p1(x.T1)); 

Można budować to jako drzewa wyrażenie następująco:

Expression<Func<T2, bool>> Convert(Expression<Func<T1, bool>> predicate) 
{ 
    var x = Expression.Parameter(typeof(T2), "x"); 
    return Expression.Lambda<Func<T2, bool>>(
     Expression.Invoke(predicate, Expression.PropertyOrField(x, "T1")), x); 
} 
+0

Jest prefektem, dzięki! – Variant

Powiązane problemy