组合表达式>谓词

本文关键字: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

组合表达式<Func<T, bool>>谓词

在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);