C# 如何合成类似类型的表达式?

C# 如何合成类似类型的表达式?,c#,linq,linq-expressions,linqkit,C#,Linq,Linq Expressions,Linqkit,我有两个相同类型的表达式: Expression<Func<IQueryable<T>, IQueryable<T>>> exprA, exprB; 但是我找不到正确的语法,即使使用LinqKit var exprC=exprA.Invoke(exprB);//不起作用 如何做到这一点?如果您的类型是真正的表达式s,您需要: var c = x => a.Compile()(b.Compile()(x)); 否则,如果它们是函数选项: v

我有两个相同类型的表达式:

Expression<Func<IQueryable<T>, IQueryable<T>>> exprA, exprB;
但是我找不到正确的语法,即使使用LinqKit

var exprC=exprA.Invoke(exprB);//不起作用


如何做到这一点?

如果您的类型是真正的
表达式
s,您需要:

var c = x => a.Compile()(b.Compile()(x));
否则,如果它们是
函数
选项:

var c = x => a(b(x));

足够了。

如果您的类型是真正的
表达式,您需要:

var c = x => a.Compile()(b.Compile()(x));
否则,如果它们是
函数
选项:

var c = x => a(b(x));

够了。

我想我明白你想做什么,这个顺序可能是错误的(如果是这样的话,只需在第四行切换f1和f2的位置即可)


我想我明白你想做什么,这个顺序可能是错误的(如果是这样的话,只需切换f1和f2在第四行的位置)


值得注意的是,这基本上是这样的:
(p1)=>f1(f2(p1))
,如果您担心效率,可以让每个lambda函数的主体替换参数并将其编译成:
(p1)=>“hello”+(p1+p1)“
这可能会更高效,但比我的一行程序要复杂一些。值得注意的是,这基本上是这样的:
(p1)=>f1(f2(p1))
,如果您担心效率,您可以让每个lambda函数体替换参数并将其编译成:
(p1)=>“hello”+(p1+p1)“
这可能比我的一行程序更有效,但要复杂一点。
p1 => Invoke(s => ("hello" + s), Invoke(s => (s + s), p1))