2

和:

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,q2q3. 我尝试过,qList.SelectMany但行为不同(可查询对象是对数据库SelectMany的查询,并对每个可查询对象进行查询,而不仅仅是一个查询)。

4

1 回答 1

5

您可以使用Aggregate扩展方法:

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

或遵循 Thomas Levesque 的建议

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

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

于 2013-10-17T20:56:16.433 回答