2011-03-08 26 views
11

Tengo dos bases de datos diferentes que contienen dos tablas con el mismo diseño exacto. ¿Cómo combino los resultados de estas dos consultas de manera más eficiente? Sé que puedo poner los resultados de cada uno en un diccionario o matriz o lo que sea, pero me gustaría pensar que hay una manera más simple de hacerlo.¿Combinando los resultados de dos consultas de Linq en un solo 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; //??? 

¡Gracias!

Addendum: Concat o Union, que es mejor para este caso en particular y por qué? ¡Gracias!

+1

¿Usted intentó 'Concat'? –

Respuesta

22

Sólo se pueden combinar las enumeraciones del mismo tipo, se puede proyectar tanto a una clase común y luego concatenar:

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 es mejor que la unión para este caso? – sooprise

+2

'Unión' eliminaría duplicados, no parece aplicarse en su caso – BrokenGlass

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

o, utilizando la sintaxis del método externsion,

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

¿qué hay de var resultUnion = Enumerable.Union (db1.table.where (blah), db2.table.where (blah))? Gracias – sooprise

+0

@sooprise Por supuesto que puedes hacerlo, ¡es lo mismo! –

+0

Por supuesto, pero ¿hay una preferencia de "mejores estándares"? – sooprise

0

Debe consultar los operadores Union y Intersect.

+0

Unión o Concat, que es mejor? – sooprise

+0

Me gustaría esperar que la única diferencia sea que Concat no elimina los valores distintos (duplicados), lo que probablemente resulte en un todo Unión en términos de SQL. – Reddog

3

La mejor manera de hacerlo es con Concat:

var resultingEnumerable = result1.Concat(result2); 
Cuestiones relacionadas