如何将Func <t,bool>转换为Expression <func <t,bool>&gt; </func <t,bool> </t,bool>

时间:2013-02-16 05:35:29

标签: c# linq c#-4.0 lambda expression-trees

我有这样的Func:

 Func<MyClass, bool> func = x=>Id == 5;

如何将其转换为:

 Expression<Func<MyClass, bool>>

3 个答案:

答案 0 :(得分:11)

你可以写:

Expression<Func<MyClass,bool>> expr = x=>Id == 5;

这会将expr设置为Id == 5的表达式树。

如果你这样做:

Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);

然后,这会将expr设置为调用func的表达式树,而不是func正文的表达式树。

答案 1 :(得分:3)

试试这个:

Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);

答案 2 :(得分:2)

您可以创建一个表达式,表示对您创建的委托的调用。但大多数情况下,当您使用Expression时,您可以这样做以了解代码的作用(例如,将其转换为SQL)。你不能用表达式来调用不透明的函数。