Considérons deux arbres d'expression:arbres d'expression - expression substitut
Expression<Func<float, float, float>> f1 = (x, y) => x + y;
Expression<Func<float, float>> f2 = x => x * x;
Je veux remplacer l'expression f2
comme second paramètre de f1
et obtenir l'expression suivante:
Expression<Func<float, float, float>> f3 = (x, y) => x + y * y;
La façon la plus simple est pour utiliser Expression.Lambda
et Expression.Invoke
, mais le résultat ressemblera à
(x, y) => f1(x, f2(y))
Mais cela est inacceptable pour moi en raison des limitations ORM qui ne peuvent pas gérer invoke/lambda correctement.
Est-il possible de construire l'expression sans traversée complète des arbres d'expression? Un exemple de travail qui répondent à mes besoins peut être trouvé here mais je veux une solution plus simple.
Sans plein traversal de arbres d'expression - non. Fondamentalement, vous avez besoin de remplacer le paramètre, qui est implémenté avec 'ExpressionVisitor'. –