Betrachten wir zwei Ausdrucksbäume:Expression Bäume - Ersatz Ausdruck
Expression<Func<float, float, float>> f1 = (x, y) => x + y;
Expression<Func<float, float>> f2 = x => x * x;
ich den Ausdruck f2
als zweiten Parameter von f1
und erhalten den folgenden Ausdruck ersetzen wollen:
Expression<Func<float, float, float>> f3 = (x, y) => x + y * y;
Der einfachste Weg ist zu verwenden Expression.Lambda
und Expression.Invoke
, aber das Ergebnis wird wie
(x, y) => f1(x, f2(y))
aussehen
Aber das ist inakzeptabel für mich aufgrund von ORM-Einschränkungen, die nicht richtig mit invoke/lambda umgehen können.
Ist es möglich, den Ausdruck ohne vollständige Traversierung von Expressionsbäumen zu konstruieren? Ein funktionierendes Beispiel, das meine Bedürfnisse erfüllt, kann here gefunden werden, aber ich möchte einfachere Lösung.
ohne vollständige Durchquerung Ausdrucksbäume - nein. Grundsätzlich benötigen Sie den Parameter Replacer, der mit ExpressionVisitor implementiert wird. –