Créer une nouvelle expression à partir d'une expression existante

.net c# expression expression-trees lambda

Question

J'ai une Expression<Func<T,DateTime>> Je veux prendre la partie DateTime de l'expression et retirer le mois. Donc, je le transformerais en Expression<Func<T,int>> Je ne sais pas trop comment faire cela. J'ai regardé le visiteur ExpressionTree mais je ne peux pas le faire fonctionner comme j'ai besoin. Voici un exemple de l'expression DateTime

DateTimeExpression http://img442.imageshack.us/img442/6545/datetimeexpression.png

Voici un exemple de ce que je veux créer avec MonthExpression http://img203.imageshack.us/img203/8013/datetimemonthexpression.png

Il semble que j'ai besoin de créer une nouvelle expression MemberExpression composée de la propriété Month à partir de l'expression DateTime, mais je ne suis pas sûr.

Réponse acceptée

Oui, c'est exactement ce que vous voulez - et utiliser Expression.Property est le moyen le plus simple de le faire:

Expression func = Expression.Property(existingFunc.Body, "Month");
Expression<Func<T, int>> lambda = 
    Expression.Lambda<Func<T, int>>(func, existingFunc.Parameters);

Je crois que ça devrait aller. Cela fonctionne dans ce test simple:

Expression func = Expression.Property(existingFunc.Body, "Month");
Expression<Func<T, int>> lambda = 
    Expression.Lambda<Func<T, int>>(func, existingFunc.Parameters);



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi