Comment faire pour convertir un LambdaExpression tapé Expression<Func<T, T>>
Je suis élaboration dynamique de requêtes linq pour nHibernate.
À cause des dépendances, j'ai voulu jeter/récupération de l'tapé expression à un moment plus tard, mais j'ai été unsuccessfull jusqu'à présent.
Ce n'est pas de travail (le casting est censé arriver d'ailleurs):
var funcType = typeof (Func<,>).MakeGenericType(entityType, typeof (bool));
var typedExpression = (Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails
Cela fonctionne:
var typedExpression = Expression.Lambda<Func<T, bool>>(itemPredicate, parameter);
Est-il possible d'obtenir le "encapsulés" tapé expression à partir d'un LambdaExpression?
- peut-être que vous êtes à la recherche pour typedExpression.Compiler()
- J'ai besoin d'utiliser l'expression comme un IQueryable avec mon ORM mappeur de sorte qu'il ne peut pas être compilé.
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas surprenant, comme vous l'avez
Compiler
unLambdaExpression
afin d'obtenir un délégué, qui peut être invoquée (qui est ce queFunc<T, bool>
est).Donc, ce serait le travail, mais je ne suis pas sûr si c'est ce dont vous avez besoin:
Si vous n'êtes pas à la recherche de compiler l'expression, mais au lieu de déplacer une arborescence d'expression autour de, alors la solution est à la place de cast pour un
Expression<Func<T, bool>>
:Expression<Func<T, bool>> typedExpression = Expression.Lambda(funcType, itemPredicate, parameter);
Cette résultats dansCannot convert souce type System.Linq.Expressions.LambdaExpression to target type System.Linq.Expressions.Expression<System.Func<MyType, object>>
var typedExpression = (Expression<Func<T, bool>>) (...)
résolu mon problème semblable.