c# - expressions - Cómo convertir una LambdaExpression a expresión escrita<Func<T, T>>
linq with lambda expression in c# (1)
var typedExpression =
(Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails
Esto no es sorprendente, ya que tiene que Compile
una LambdaExpression
para obtener un delegado real que pueda invocarse (que es lo que Func<T, bool>
es).
Entonces esto funcionaría, pero no estoy seguro si es lo que necesitas:
// This is no longer an expression and cannot be used with IQueryable
var myDelegate =
(Func<T, bool>)
Expression.Lambda(funcType, itemPredicate, parameter).Compile();
Si no busca compilar la expresión sino que mueve un árbol de expresiones, la solución es convertirla en una Expression<Func<T, bool>>
:
var typedExpression = (Expression<Func<T, bool>>)
Expression.Lambda(funcType, itemPredicate, parameter);
Estoy construyendo dinámicamente consultas de linq para nHibernate.
Debido a las dependencias, quería lanzar / recuperar la expresión escrita más adelante, pero hasta ahora no he tenido éxito.
Esto no está funcionando (se supone que el elenco debe suceder en otro lugar):
var funcType = typeof (Func<,>).MakeGenericType(entityType, typeof (bool));
var typedExpression = (Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails
Esto está funcionando:
var typedExpression = Expression.Lambda<Func<T, bool>>(itemPredicate, parameter);
¿Es posible obtener la expresión tipeada ''encapsulada'' de un LambdaExpression?