智商列表的联合
本文关键字:列表 | 更新日期: 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
而不是使用q1
,q2
和q3
。我尝试使用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>
。