组合表达式>谓词
本文关键字:bool 谓词 表达式 Func 组合 | 更新日期: 2023-09-27 18:04:44
我有一个方法返回一个
Expression<Func<T, bool>>
当我在EF的where子句中使用this作为谓词时,这工作得很好,直到我尝试使用Expression.Or()向谓词添加更多项时,我遇到了以下异常:
参数"xxx"没有在指定的LINQ到实体查询表达式中绑定。
有没有办法解决这个问题?究竟是什么原因造成的呢?
使用http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
在EF中,如果调用
IQueryable<T> query = ...
query.Where( predicate 1 ).Where( predicate 2 )...
那么EF将用AND
加入where
条款
在EF中做OR
的唯一方法是将谓词放在对IQueryable.Where
的单个调用中
IQueryable<T> query = ...
query.Where( predicate 1 || predicate 2 )...
要像AND一样组合OR,可以使用PredicateBuilder
要在OR关系中组合谓词,您可以:
predicate = Expression.Lambda<Func<T, bool>>(Expression.Or(predicate.Body, newPredicate.Body), newPredicate.Parameters);