使用:
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
对每个可查询进行查询,而不是仅查询一个查询。)
答案 0 :(得分:5)
您可以使用Aggregate
扩展名方法:
var q = qList.Aggregate((x, y) => x.Union(y));
或关注Thomas Levesque的suggestion:
var q = qList.Aggregate(Queryable.Union);
这将从qList
中选择第一个项目,将其与第二个项目结合,将结果与第三个项目结合,依此类推qList
中的每个项目。请注意,这实际上不会涉及评估任何IQueryable<T>
,只是构建一个代表其他人的联合的新IQueryable<T>
。