表达式查询中的动态Lambda表达式

时间:2012-03-12 20:21:12

标签: c# .net linq entity-framework lambda

是否可以在查询表达式中使用动态Linq表达式? 像这样:

from obj1 in ObjectSet1
let res = ObjectSet2.Where(* SomeExpression *)
where ...
select ...

我正在尝试为SomeExpression构建Expression.Lambda<Func<TSource, bool>>表达式。

  1. 是否可以在Expression Query中使用动态Linq Expression,还是需要从头开始构建整个Expression树?
  2. 我在构建SomeExpression时如何使用obj1?
  3. 注意:我正在使用Entity Framework,我不能在表达式树中使用SomeExpression.Compile()。

2 个答案:

答案 0 :(得分:3)

这不仅是可能的,而且是正常的。可以从较小的树生成大型表达式树(这是LINQ所做的)。您只需将Expression<Func<TSource, bool>>传递给Where()

您可以在我的回复中查看此处的其他帖子 - replacing operator in Where clause Lambda with a parameter。有趣的部分是MakeWhereLambda方法。

答案 1 :(得分:1)

如果您希望它是完全动态的,一种可能的选择是使用表达式树序列化:

http://expressiontree.codeplex.com/

我开始使用它一段时间但是这个任务得到了重新优先级,所以我不确定它对于任何给定的任务是多么合适。那说,看起来很不错......

希望这有帮助。

内特