【问题标题】:Union of a List of IQueryablesIQueryables 列表的联合
【发布时间】:2013-10-17 20:53:33
【问题描述】:

与:

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

【问题讨论】:

标签: c# linq iqueryable


【解决方案1】:

您可以使用Aggregate扩展方法:

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

或关注 Thomas Levesque 的 suggestion

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

这将从qList 中选择第一个项目,将它与第二个项目联合,将结果与第三个项目联合,以此类推qList 中的每个项目。请注意,这实际上并不涉及评估任何IQueryable&lt;T&gt;,只是构造一个新的IQueryable&lt;T&gt;,它代表其他人的联合。

【讨论】:

  • 你也可以这样写:qList.Aggregate(Queryable.Union)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多