Linq PredicateBuilder – 多个OR

我正在尝试使用PredicateBuilder,如下所述 – http://www.albahari.com/nutshell/predicatebuilder.aspx

以下代码

var predicate = PredicateBuilder.False(); predicate = predicate.Or(p => p.Locality.Contains(criteria.Locality)); predicate = predicate.Or(p => p.Name.Contains(criteria.Name)); predicate = predicate.Or(p => p.Town.Contains(criteria.Town)); List streetData = StreetData.Instance(); var streetList = from street in streetData.Where(predicate) select street; 

根据这个例子,据我所知,这应该有效

 var newKids = Product.ContainsInDescription ("BlackBerry", "iPhone"); var classics = Product.ContainsInDescription ("Nokia", "Ericsson") .And (Product.IsSelling()); var query = from p in Data.Products.Where (newKids.Or (classics)) select p; 

但我得到的只是

错误1无法从用法中推断出方法’System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)’的类型参数。 尝试显式指定类型参数。

我正试图在LINQ’在职’获得一些理解,所以如果这是一个简单的问题,请道歉。

啊; 你的列表使用IEnumerable扩展方法(而不是IQueryable ) – 尝试:

 var streetList = from street in streetData.AsQueryable().Where(predicate) select street; 

尝试编译谓词:

 var streetList = from street in streetData.Where(predicate.Compile()) select street;