如何在"或"上分割或连接linq查询?(不使用Union)

本文关键字:quot Union 连接 分割 linq 查询 | 更新日期: 2023-09-27 18:11:26

假设您正在搜索具有两个布尔属性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提供程序中不支持union。

x => x. a &&通过链接where子句。这就是我的意思:

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

是否有一些类似的解决方案或情况?

谢谢,艾萨克

如何在"或"上分割或连接linq查询?(不使用Union)

using Predicate Builder

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();

如果您的LINQ提供程序不支持联合操作符,您总是可以首先使用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);

只要合并的结果不太大,就可以正常工作。