2009-12-14 16 views
22

यदि मुझे दो परिणाम मिलते हैं IQueryable विभिन्न linq क्वेरी से और मैं उन्हें एक साथ विलय करना चाहता हूं और परिणामस्वरूप एक को वापस करना चाहता हूं, तो यह कैसे करें? उदाहरण के लिए, यदि:परिणाम IQueryable <T> एक साथ विलय कैसे करें?

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

एक साथ q1 और q2 मर्ज करने के लिए कैसे और परिणाम प्राप्त

तरह
var q = (IQueryable<Person>)q1.Union(q2); 

उत्तर

24

आप इसे किया है, q1.Union(q2)Union सिस्टम में है। क्वेरीक के साथ लिंक्स नेमस्पेस।

+3

मुझे सही अगर मैं गलत हूँ लेकिन IMO इस समाधान में यह ध्यान में रखा जाना चाहिए कि संघ पैरामीटर IENumerable है, इस प्रकार यह डेटाबेस में संघ नहीं करेगा। इसके अलावा यह डेटाबेस में दो बार कॉल करेगा क्योंकि पैरामीटर एक आईनेमरेबल है और भले ही कोई एक IQueryable पास करता है, इसे डेटाबेस में एक और कॉल के रूप में निष्पादित किया जाएगा। बस यह इंगित करना चाहता था कि ऑन-मेमोरी-यूनियन पर प्रदर्शन एक समस्या है या डेटाबेस – fmaccaroni

+1

@fmaccaroni पर कॉल I इस प्रश्न पर आया क्योंकि मैंने वही चीज़ सोचा था। मैंने फिर LINQPad 5 में एक त्वरित परीक्षण किया जो * LINQ-to-SQL का उपयोग करना चाहिए। 'q1.Union (q2)' से चुनें * चुनें * चुनें * q1 यूनियन से चुनें * q2 से चुनें) '। इसलिए, LINQ 'IEUumerable' पैरामीटर को कवर के नीचे कहीं भी' IQueryable' पर रखता है। –

15

आप 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()); 

संघ की तरह ही आप DISTINCT मूल्यों दे देंगे कोशिश कर सकते हैं, Concat आप यूनिअन सभी दे देंगे।

+4

संघ डिफ़ॉल्ट तुलनाकर्ता का उपयोग करेगा, अगर उसने एक निर्दिष्ट नहीं किया है, तो प्रत्येक व्यक्ति के पास एक अलग ऑब्जेक्ट संदर्भ होगा। –

2
(q1.Union(q2)).AsQuerable() 
+1

संघ विधि एक क्वेरी योग्यता देता है। –

+0

Concat अधिक उपयुक्त हो सकता है – kerem

2

NHibernate संघ के साथ संभव नहीं है।

आपको डीबी प्रोसेसिंग यूनियन की बजाय ग्राहक पक्ष पर प्रक्रिया करना है। मैं IQueryable से INumerable को AsEnumerable के साथ परिवर्तित करता हूं और फिर Concat एक्सटेंशन का उपयोग करता हूं।

वर allItems = q1.AsEnumerable()। Concat (Q2)

सादर, सेबस्टियन

संबंधित मुद्दे