1

假设您正在搜索具有两个布尔属性 A 和 B 的对象。

如果您有两个 linq 查询怎么办:

IQueryable<ObjectType> query = getIQueryableSomehow()
query.Where(x => x.A);

IQueryable<ObjectType> query2 = getIQueryableSomehow()
query2.Where(x => x.B);

我怎样才能将这些查询连接在一起,使它们等同于这个?:

IQueryable<ObjectType> query3 = getIQueryableSomehow()
query3.Where(x => x.A || x.B)

我想使用 query3 = query.Union(query2),但遗憾的是在我的 Linq 提供程序联合中不受支持。

我通过链接 where 子句来拆分 x => xA && xB 的情况。这就是我的意思:

IQueryable<ObjectType> query = getIQueryableSomehow();
query = query.Where(x => x.A);
query = query.Where(x => x.B);

or 案例有类似的解决方法吗?

谢谢,

艾萨克

4

2 回答 2

6

使用谓词生成器

IQueryable<ObjectType> query = getIQueryableSomehow();
var predicate = PredicateBuilder.False<ObjectType>();
predicate = predicate.Or(x => x.A);
predicate = predicate.Or(x => x.B);

var list = query.Where(predicate).ToList();
于 2011-10-17T23:53:24.100 回答
1

如果您的 LINQ 提供程序不支持 Union 运算符,您始终可以首先使用 ToArray() 实现查询结果,然后使用 LINQ-to-objects 提供程序执行它支持的联合,如下所示:

IQueryable<ObjectType> query = getIQueryableSomehow() 
query.Where(x => x.A); 

IQueryable<ObjectType> query2 = getIQueryableSomehow() 
query2.Where(x => x.B); 

IQueryable<ObjectType> query3 = query.ToArray().AsQueryable<ObjectType>().Union(query2);

只要您合并的结果不是太大,这将很有效。

于 2011-10-17T23:51:57.753 回答