智商列表的联合

本文关键字:列表 | 更新日期: 2023-09-27 18:35:46

With:

var q1 = (IQueryable<T>).....;
var q2 = (IQueryable<T>).....;
var q3 = (IQueryable<T>).....;
var qList = new List<IQueryable<T>>{q1, q2, q3};

我想这样做:

var q = q1.Union(q2).Union(q3);

但是使用qList而不是使用q1q2q3。我尝试使用qList.SelectMany但行为不同(可查询对象是对数据库的查询,SelectMany对每个可查询对象进行查询,而不仅仅是一个查询)。

智商列表的联合

您可以使用

Aggregate扩展方法:

var q = qList.Aggregate((x, y) => x.Union(y));

或者遵循Thomas Levesque的建议:

var q = qList.Aggregate(Queryable.Union);

这将从qList中选取第一项,将其与第二项并集,将结果与第三项并集,依此类推,qList中的每个项。请注意,这实际上并不涉及评估任何IQueryable<T>,只是构建一个代表其他并集的新IQueryable<T>