IQueryables名单联盟

时间:2013-10-17 20:53:33

标签: c# linq iqueryable

使用:

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对每个可查询进行查询,而不是仅查询一个查询。)

1 个答案:

答案 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>