首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq PredicateBuilder -多个OR

Linq PredicateBuilder -多个OR
EN

Stack Overflow用户
提问于 2009-05-18 10:13:27
回答 2查看 17.7K关注 0票数 15

我正在尝试使用PredicateBuilder,如这里所描述的- http://www.albahari.com/nutshell/predicatebuilder.aspx

以下代码

代码语言:javascript
复制
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;

据我所见,这应该是可行的,根据这个例子

代码语言:javascript
复制
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;

但我得到的只是

方法'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)‘的类型参数不能从用法中推断。尝试显式指定类型参数。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-18 10:24:39

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

代码语言:javascript
复制
var streetList = from street in streetData.AsQueryable().Where(predicate)
                 select street;
票数 18
EN

Stack Overflow用户

发布于 2009-05-18 10:23:22

试着编译谓词:

代码语言:javascript
复制
var streetList = from street in streetData.Where(predicate.Compile())
                 select street;
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/877034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档