我有一个返回
的方法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
答案 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);