.NET表达式类型支持将调用表示为由另一个表达式定义的函数,但是有没有使用C#lambda表达式语法表达的方法?我可以生成一个表达式,编译它并在另一个表达式中调用它,但是失去了被调用lambda表达式的“表达式”,并且调用表达式将只包含对匿名编译函数的引用。如何使用C#lambda表达式语法调用另一个表达式?
也就是说,我想要做的是一样的东西:
Expression<Func<int, int>> f = x => x + x;
Expression<Func<int, int>> g = x => 2 + f(x);
,但因为它不是有效的直接调用的表达,我最接近的是:
Expression<Func<int, int>> f = x => x + x;
var f_ = f.Compile();
Expression<Func<int, int>> g = x => 2 + f_(x);
...这就失去了被调用函数f是一个表达式的事实。
是的,我发现Expression.Invoke和InvocationExpression,这是我知道它可以代表。我很惊讶,没有办法用lambda表达式语法来表达它。实际上,使用lambda语法无法创建的所有表达式类型究竟是什么,大多数LINQ提供者是否支持它们? – SoftMemes
优秀的答案,谢谢! – SoftMemes