2010-10-26 18 views
8

में शामिल कीवर्ड के साथ व्यक्त किए गए जॉइन पर चयन में शामिल होने से जुड़ने के लिए चुनने के लिए चुनने के लिए जब लिंक शामिल कीवर्ड का उपयोग करके या SelectMany() (यानी कीवर्ड से कुछ) का उपयोग करके आंतरिक जुड़ने की अनुमति देता है कीवर्ड:लिंक

var personsToState = from person in persons 
        join state in statesOfUS 
        on person.State equals state.USPS 
        select new { person, State = state.Name }; 
foreach (var item in personsToState) 
{ 
    System.Diagnostics.Debug.WriteLine(item); 
} 

// The same query can be expressed with the query operator SelectMany(), which is 
// expressed as two from clauses and a single where clause connecting the sequences.      
var personsToState2 = from person in persons 
         from state in statesOfUS 
         where person.State == state.USPS 
         select new { person, State = state.Name }; 
foreach (var item in personsToState2) 
{ 
    System.Diagnostics.Debug.WriteLine(item); 
} 

मेरा प्रश्न: जब यह, में शामिल होने शैली जब उपयोग करने के लिए और जहां-शैली का उपयोग करने उद्देश्यपूर्ण है अन्य शैली पर एक शैली प्रदर्शन फायदे हैं?

उत्तर

6

स्थानीय प्रश्नों Join के लिए, Athari mentioned के रूप में अपनी बंद देखने की वजह से और अधिक कुशल है एसक्यूएल को LINQ (L2S) के लिए हालांकि आप SelectMany का अधिकाधिक लाभ उठाएं लाभ मिलेगा। L2S में SelectMany अंत में आपकी क्वेरी के आधार पर जेनरेट किए गए SQL में कुछ प्रकार के SQL जुड़ने का उपयोग करता है।

प्रश्नों पर एक नज़र डालें 11 यूसुफ/बेन अल्बाहारी, सी # 4.0 के लेखकों के संक्षेप में। वे मिलती है के विभिन्न प्रकार के नमूने और दिखाने के वे राज्य:

एसक्यूएल, करने के लिए LINQ के साथ

SelectMany आधारित मिलती है सबसे लचीला कर रहे हैं, और प्रदर्शन कर सकते हैं दोनों सम और गैर सम मिलती है। डिफ़ॉल्ट IFEmpty में फेंको, और आप भी बाहरी जोड़ों को छोड़ सकते हैं! LINQ: Building an IQueryable provider - Part VII: के रूप में यह IQueryable/एसक्यूएल यहाँ से संबंधित है

इसके अलावा, मैट वॉरेन इस विषय पर एक विस्तृत ब्लॉग पोस्ट है।

उपयोग करने के लिए आपके प्रश्न पर वापस जाएं, आपको जो भी क्वेरी अधिक पठनीय है उसका उपयोग करना चाहिए और आपको आसानी से स्वयं को व्यक्त करने और स्पष्ट रूप से अपना अंतिम लक्ष्य बनाने की अनुमति देता है। प्रदर्शन तब तक प्रारंभिक चिंता नहीं होनी चाहिए जब तक आप बड़े संग्रह से निपट नहीं रहे हैं और दोनों दृष्टिकोणों का प्रोफाइल किया है। एल 2 एस में आपको लचीलापन SelectMany पर विचार करना होगा, जिस तरह से आपको अपना डेटा जोड़ना होगा।

2

जुड़ें अधिक कुशल है, यह मिलान मूल्यों को खोजने के लिए लुकअप क्लास (एकल कुंजी के लिए एकाधिक मानों के साथ शब्दकोश का एक भिन्नता) का उपयोग करता है।

+0

दोनों विधियां * प्रभावी * हैं, लेकिन शायद अधिक * कुशल * शामिल हों ... –

+0

@ थॉमस लेवेस्क आपके सुधार के लिए धन्यवाद, अंग्रेजी मेरी मूल भाषा नहीं है। – Athari