with expressions expresiones c# .net casting lambda linq-expressions

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?