我有一个这样的Func:
我怎样才能将它转换为:
代码如下:
Func<MyClass, bool> func = x=>Id == 5;
我怎样才能将它转换为:
Expression<Func<MyClass, bool>>
代码如下:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>>
你可以只写:
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
主体的表达式树。
试试这个:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
expr
设置为调用一个委托,该委托接受 MyClass
并返回 bool
。expr
不会保存实际 lambda 的语法树。 - Sean您可以创建表示对所创建委托的调用的表达式。但是大多数情况下,当您使用 Expression
时,您这样做是为了理解代码的功能(例如将其转换为 SQL)。而对于调用不透明函数的表达式,您无法这样做。