考虑两棵表达式树:
最简单的方法是使用
Expression<Func<float, float, float>> f1 = (x, y) => x + y;
Expression<Func<float, float>> f2 = x => x * x;
我想将表达式f2
作为f1
的第二个参数替换,并得到以下表达式:
Expression<Func<float, float, float>> f3 = (x, y) => x + y * y;
最简单的方法是使用
Expression.Lambda
和 Expression.Invoke
,但结果看起来像这样(x, y) => f1(x, f2(y))
但是对于我来说,这是不可接受的,因为ORM限制无法正确处理调用/lambda。
有没有可能构造表达式而无需完全遍历表达式树?可以在这里找到满足我的需求的工作示例,但我想要更简单的解决方案。
ExpressionVisitor
实现的。 - Ivan Stoev