通过已有Func构造Expression表达式问题

时间:2022-09-17 18:49:22
如题,我有一个Func<TEntity, bool> func,我想通过这个Func构造一个Expression<Func<TEntity, bool>>表达式,Expression<Func<TEntity, bool>> exp = m => func(m);这种方法我试过,在EF中不能使用。我需要在EF中能使用的。谢谢大家!

11 个解决方案

#1


求助,求解答!谢谢!

#2


应该是不行,Func<TEntity, bool> func过来已经被编译完了,不能再转化成表达式树了

#3


除非你的func也是Expression<Func<TEntity, bool>>才能修改,否则它只是一个委托(函数指针)

#4


引用 3 楼 sbwwkmyd 的回复:
除非你的func也是Expression<Func<TEntity, bool>>才能修改,否则它只是一个委托(函数指针)

是的,func也是Expression<Func<TEntity, bool>>,应该如何操作?

#5


引用 4 楼 gaogar2008 的回复:
是的,func也是Expression<Func<TEntity, bool>>,应该如何操作?

你这个需求不需要修改啊
Expression<Func<TEntity, bool>> exp = func;

就可以了,如果要修改,应该是调用Expression.XXX这些函数重新构造

#6


引用 5 楼 sbwwkmyd 的回复:
引用 4 楼 gaogar2008 的回复:
是的,func也是Expression<Func<TEntity, bool>>,应该如何操作?
你这个需求不需要修改啊


C# code
?



1

Expression<Func<TEntity, bool>> exp = func;
就可以了,如果要修改,应该是调用Expression.XXX这些函数重新构造


应该是func是一个Func<TEntity, bool>,exp是一个Expression<Func<TEntity, bool>>,其中这个TEntity和bool是一致的。

#7


引用 6 楼 gaogar2008 的回复:
应该是func是一个Func<TEntity, bool>,exp是一个Expression<Func<TEntity, bool>>,其中这个TEntity和bool是一致的。

Func<TEntity, bool>只是一个委托,Expression<Func<TEntity, bool>>才是表达式。
一个类比与程序执行结果,一个类比与源程序。光有个结果,谁知道是那个程序跑出来的?

#8


引用 7 楼 sbwwkmyd 的回复:
引用 6 楼 gaogar2008 的回复:
应该是func是一个Func<TEntity, bool>,exp是一个Expression<Func<TEntity, bool>>,其中这个TEntity和bool是一致的。
Func<TEntity, bool>只是一个委托,Expression<Func<TEntity, bool>>才是表达式。
一个类比与程序执行结果,一个类比与源程序……

也就是说无法通过委托构建表达式了

#9


引用 8 楼 gaogar2008 的回复:
也就是说无法通过委托构建表达式了

一般来说就是不行了。
这就像是要反编译,需要IL层次的知识,而且不同的.NET版本的委托指针内存模式还不一样。

#10



Func<Product, bool> predicate = m => m.Id == 1;
Expression<Func<Product,bool>> expression = m => predicate(m);


不知道这个样写可不可以

#11


引用 10 楼 guoyun911 的回复:

Func<Product, bool> predicate = m => m.Id == 1;
Expression<Func<Product,bool>> expression = m => predicate(m);


不知道这个样写可不可以


当我没说。。。不能用

#1


求助,求解答!谢谢!

#2


应该是不行,Func<TEntity, bool> func过来已经被编译完了,不能再转化成表达式树了

#3


除非你的func也是Expression<Func<TEntity, bool>>才能修改,否则它只是一个委托(函数指针)

#4


引用 3 楼 sbwwkmyd 的回复:
除非你的func也是Expression<Func<TEntity, bool>>才能修改,否则它只是一个委托(函数指针)

是的,func也是Expression<Func<TEntity, bool>>,应该如何操作?

#5


引用 4 楼 gaogar2008 的回复:
是的,func也是Expression<Func<TEntity, bool>>,应该如何操作?

你这个需求不需要修改啊
Expression<Func<TEntity, bool>> exp = func;

就可以了,如果要修改,应该是调用Expression.XXX这些函数重新构造

#6


引用 5 楼 sbwwkmyd 的回复:
引用 4 楼 gaogar2008 的回复:
是的,func也是Expression<Func<TEntity, bool>>,应该如何操作?
你这个需求不需要修改啊


C# code
?



1

Expression<Func<TEntity, bool>> exp = func;
就可以了,如果要修改,应该是调用Expression.XXX这些函数重新构造


应该是func是一个Func<TEntity, bool>,exp是一个Expression<Func<TEntity, bool>>,其中这个TEntity和bool是一致的。

#7


引用 6 楼 gaogar2008 的回复:
应该是func是一个Func<TEntity, bool>,exp是一个Expression<Func<TEntity, bool>>,其中这个TEntity和bool是一致的。

Func<TEntity, bool>只是一个委托,Expression<Func<TEntity, bool>>才是表达式。
一个类比与程序执行结果,一个类比与源程序。光有个结果,谁知道是那个程序跑出来的?

#8


引用 7 楼 sbwwkmyd 的回复:
引用 6 楼 gaogar2008 的回复:
应该是func是一个Func<TEntity, bool>,exp是一个Expression<Func<TEntity, bool>>,其中这个TEntity和bool是一致的。
Func<TEntity, bool>只是一个委托,Expression<Func<TEntity, bool>>才是表达式。
一个类比与程序执行结果,一个类比与源程序……

也就是说无法通过委托构建表达式了

#9


引用 8 楼 gaogar2008 的回复:
也就是说无法通过委托构建表达式了

一般来说就是不行了。
这就像是要反编译,需要IL层次的知识,而且不同的.NET版本的委托指针内存模式还不一样。

#10



Func<Product, bool> predicate = m => m.Id == 1;
Expression<Func<Product,bool>> expression = m => predicate(m);


不知道这个样写可不可以

#11


引用 10 楼 guoyun911 的回复:

Func<Product, bool> predicate = m => m.Id == 1;
Expression<Func<Product,bool>> expression = m => predicate(m);


不知道这个样写可不可以


当我没说。。。不能用