Linq PredicateBuilder - 多个OR

时间:2009-05-18 10:13:28

标签: c# linq

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

以下代码

var predicate = PredicateBuilder.False<StreetDTO>();

        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<StreetDTO> 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'在职'获得一些理解,所以如果这是一个简单的问题,请道歉。

2 个答案:

答案 0 :(得分:18)

阿;您的列表使用IEnumerable<T>扩展方法(而不是IQueryable<T>) - 尝试:

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

答案 1 :(得分:11)

尝试编译谓词:

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