2011-03-08 17 views
11

Aynı tasarıma sahip iki tablo içeren iki farklı veritabanım var. Sonuçları bu iki sorgudan en verimli şekilde nasıl birleştiririm? Her birinin sonuçlarını bir sözlük veya diziye ya da herhangi bir şeye yerleştirebileceğimi biliyorum, ancak bunu yapmanın daha basit bir yolu olduğunu düşünmek istiyorum.Tek Bir Varlığa İki Linq Sorgusunun Sonuçlarını Birleştirme?

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; //??? 

Teşekkürler!

Ek: Bu özel durum için neden daha iyi olan Concat veya Union ve neden? Teşekkürler! externsion yöntemi sözdizimini kullanarak

+1

Eğer 'Concat' denediniz mi? –

cevap

22

Yalnızca, ortak bir sınıfa hem yansıtabilmeliydi aynı türden numaralandırma birleştirmek ve daha sonra onları bir arada kullanabilirsiniz:

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

Bu dava için sendikadan daha mı iyi? – sooprise

+2

'Union' yinelenenleri kaldıracak, sizin durumunuzda daha iyi olan – BrokenGlass

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

ya,

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

nasıl var sonuçUnion = Enumerable.Union (db1.table.where (blah), db2.table.where (blah))? Teşekkür – sooprise

+0

@sooprise Tabii ki yapabilirsin, aynı şey! –

+0

Tabii ki, ama "daha iyi standartlar" tercihi var mı? – sooprise

0

Union ve Intersect işleçlerini incelemelisiniz.

+0

Birliği veya Concat gibi görünmüyor mu? – sooprise

+0

Tek farkın, Concat'ın farklı değerleri (çiftleri) kaldırmamasıdır. – Reddog

3

Bunu yapmanın en iyi yolu CONCAT ile geçerli:

var resultingEnumerable = result1.Concat(result2); 
İlgili konular