是否可以在查询表达式中使用动态Linq表达式?就像这样:
from obj1 in ObjectSet1
let res = ObjectSet2.Where(* SomeExpression *)
where ...
select ...我正在尝试构建Expression.Lambda<Func<TSource, bool>>表达式,就像构建SomeExpression表达式一样。
是否可以在表达式查询中使用动态Linq表达式,还是需要从头构建整个表达式树?如果存在,在构建SomeExpression?时如何使用obj1?
注意:我使用的是实体框架,不能在表达式树中使用SomeExpression.Compile()。
发布于 2012-03-12 21:02:08
这不仅是可能的,也是正常的。大型表达式树可以从较小的树中生成(这就是LINQ所做的)。您只需将一个Expression<Func<TSource, bool>>传递给Where()。
在我对这里的另一个线程- replacing operator in Where clause Lambda with a parameter的回复中,您可以看到。有趣的部分在MakeWhereLambda方法中。
发布于 2012-03-12 20:34:12
如果您希望它是完全动态的,一个可能的选项是使用Expression序列化:
http://expressiontree.codeplex.com/
我一段时间前就开始使用它了,但是这个任务被重新排序了,所以我不确定它是否适合于任何给定的任务。也就是说,看上去很不错..。
希望这能有所帮助。
内特
https://stackoverflow.com/questions/9674211
复制相似问题