2011-03-08 13 views
11

मेरे पास दो अलग-अलग डेटाबेस हैं जिनमें सटीक उसी डिज़ाइन के साथ दो टेबल हैं। मैं इन दो प्रश्नों से परिणामों को सबसे कुशलता से कैसे जोड़ूं? मुझे पता है कि मैं प्रत्येक के परिणाम को एक शब्दकोश या सरणी या जो कुछ भी डाल सकता हूं, लेकिन मुझे लगता है कि ऐसा करने का एक आसान तरीका है।एक सिंगल वार में दो लिंक क्वेरीज़ के परिणाम का संयोजन?

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 या संघ, जो इस विशेष मामले के लिए बेहतर है और क्यों? धन्यवाद!

+1

आप का प्रयास किया था 'Concat'? –

उत्तर

22

आप केवल एक ही प्रकार के enumerations गठजोड़ कर सकते हैं, तो आप एक सामान्य वर्ग के लिए दोनों परियोजना सकता है और फिर उन्हें श्रेणीबद्ध:

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

इस मामले के लिए संघ से बेहतर है? – sooprise

+2

'यूनियन' डुप्लीकेट को हटा देगा, आपके मामले में – BrokenGlass

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

+0

@sooprise बेशक आप यह कर सकते हैं, यह वही बात है! –

+0

बेशक, लेकिन क्या "बेहतर मानकों" वरीयता है? – sooprise

0

आपको Union और Intersect ऑपरेटरों में देखना चाहिए।

+0

यूनियन या कंसैट में लागू नहीं होता है, जो बेहतर है? – sooprise

+0

मैं केवल एक ही अंतर की अपेक्षा करता हूं कि कंसट अलग-अलग मूल्यों (डुप्लिकेट) को नहीं हटाता है - इसलिए संभवतः एसक्यूएल शब्दों में संघीय सभी का परिणाम होता है। – Reddog

3

यह करने के लिए सबसे अच्छा तरीका है Concat साथ है:

var resultingEnumerable = result1.Concat(result2); 
संबंधित मुद्दे