2011-10-02 12 views
5

que tienen un predicado Expression<Func<T1, bool>>LINQ - Creación de Expresión <T1> de Expresión <T2>

que necesito para utilizarlo como un predicado Expression<Func<T2, bool>> utilizando la propiedad T1 de T2 yo estaba tratando de pensar en varias approches, probablemente usando Expression.Invoke pero couln; Entiendo cómo funciona.

Como referencia:

class T2 { 
    public T1 T1; 
} 

Y

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

Gracias mucho por adelantado.

Respuesta

7

Trate de encontrar la solución con lambdas normales antes de pensar en los árboles de expresión.

Usted tiene un predicado

Func<T1, bool> p1 

y quieren un predicado

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

Usted puede construir esto como un árbol de expresión de la siguiente manera:

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

Este es perfecta, gracias! – Variant

Cuestiones relacionadas