编写表达式<func <t,bool =“”>&gt;谓词</FUNC <t时,>

时间:2013-03-20 09:11:42

标签: c# entity-framework lambda extension-methods iqueryable

我有一个返回

的方法
Expression<Func<T, bool>> 

当我在EF中的where子句中使用它作为谓词时,这很好用,直到我尝试使用Expression.Or()向谓词中添加更多项目时,我遇到以下异常:

  

参数'xxx'未绑定在指定的LINQ to Entities查询表达式中。

有什么方法可以解决这个问题吗?究竟是什么原因造成的

解决

使用http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx

3 个答案:

答案 0 :(得分:2)

在EF中,如果你打电话

IQueryable<T> query = ...
query.Where( predicate 1 ).Where( predicate 2 )...

然后,EF会将where条款加入AND

EF执行OR的唯一方法是将谓词放入IQueryable.Where

的单个调用中
IQueryable<T> query = ...
query.Where( predicate 1 || predicate 2 )...

答案 1 :(得分:2)

要撰写或喜欢AND,您可以使用PredicateBuilder

答案 2 :(得分:-1)

要在OR关系中组合谓词,您可以执行以下操作:

predicate = Expression.Lambda<Func<T, bool>>(Expression.Or(predicate.Body, newPredicate.Body), newPredicate.Parameters);