如何将结果IQueryable <t>合并在一起?</t>

时间:2009-12-14 16:53:44

标签: linq

如果我从不同的linq Query中得到两个结果IQueryable并且我想将它们合并在一起并返回一个结果,那么如何? 例如,如果:

var q1 = (IQueryable<Person>).....;
var q2 = (IQueryable<Person>).....;

如何将q1和q2合并在一起并得到像

这样的结果
var q = (IQueryable<Person>)q1.Union(q2);

4 个答案:

答案 0 :(得分:25)

你拥有它,q1.Union(q2)Union位于带有Queryable的System.Linq命名空间中。

答案 1 :(得分:16)

您可以尝试使用Concat方法

像这样的东西

int[] i1 = new int[] { 1, 2, 3 };
int[] i2 = new int[] { 3, 4 };
//returns 5 values
var i3 = i1.AsQueryable().Concat(i2.AsQueryable());
//returns 4 values
var i4 = i1.AsQueryable().Union(i2.AsQueryable());

Union 只会为您提供 DISTINCT 值,Concat会为您提供 UNION ALL

答案 2 :(得分:2)

(q1.Union(q2)).AsQuerable()

答案 3 :(得分:2)

使用NHibernate Union是不可能的。

您必须在客户端进行处理,而不是DB处理联合。 我使用AsEnumerable将IQueryable转换为IENumerable,然后使用Concat扩展。

var allItems = q1.AsEnumerable()。Concat(q2)

此致 塞巴斯蒂安