2011-03-08 165 views
11

我有两个不同的数据库,包含两个完全相同的设计表。如何最有效地组合这两个查询的结果?我知道我可以把每个结果放到字典或数组中,但我想认为有一个更简单的方法来做到这一点。将两个Linq查询的结果合并为一个Var变量?

var db1 = //A database object connected to database1 
var db2 = //A database object connected to database2 

var result1 = db1.table.where(a=>a.value>0); 
var result2 = db2.table.where(a=>a.value>0); 

var resultSum = result1+result2; //??? 

谢谢!

附录:Concat或Union,哪个更适合这种特殊情况,为什么?谢谢!

+1

你尝试'Concat'? – 2011-03-08 17:17:06

回答

22

只能合并同类型的枚举,你能预料双方的共同类,然后将它们连接起来:

var result1 = db1.table.Where(a=>a.value>0).Select(x=> new Foo() { /*set props*/ }); 
var result2 = db2.table.Where(a=>a.value>0).Select(x=> new Foo() { /*set props*/ }); 

var resultSum = result1.Concat(result2); 
+0

对于这种情况,concat比union更好吗? – sooprise 2011-03-08 17:20:38

+2

'联盟'会删除重复,似乎不适用于你的情况 – BrokenGlass 2011-03-08 17:24:43

3
var resultUnion = Enumerable.Union(result1, result2) 

,或者使用externsion方法的语法,

var resultUnion = result1.Union(result2); 
+0

var resultUnion = Enumerable.Union(db1.table.where(blah),db2.table.where(blah))?谢谢 – sooprise 2011-03-08 17:18:14

+0

@sooprise当然,你可以做到,它是一样的! – 2011-03-08 17:21:32

+0

当然,但是有没有更好的标准? – sooprise 2011-03-08 17:27:55

0

您应该查看UnionIntersect运营商。

+0

联盟或Concat,哪个更好? – sooprise 2011-03-08 17:19:36

+0

我期望唯一的区别是Concat不会删除不同的值(重复项) - 因此可能会导致使用SQL语言的Union All。 – Reddog 2011-03-08 17:27:48

3

做到这一点,最好的办法是用的毗连:

var resultingEnumerable = result1.Concat(result2);