2008-10-29 14 views
8

मैं लैम्ब्डा के साथ अधिक से अधिक अभ्यास करता हूं लेकिन मुझे नहीं पता कि क्यों कुछ उदाहरण उदाहरण .AsQueryable(); का उपयोग करते हैं जो IQueryable का उपयोग करते हैं और कभी-कभी यह .AsQueryable(); को छोड़ देता है और IENumerable का उपयोग करता है।IQueryable <T> बनाम आईनेमेरेबल <T> लैम्ब्डा के साथ, जिसे चुनना है?

मैंने MSDN पढ़ा है, लेकिन मुझे नहीं पता कि "अभिव्यक्ति वृक्ष निष्पादित करना" एक लाभ नहीं है।

कोई भी मुझे यह समझा सकता है?

उत्तर

6

IQueryable, IEnumerable लागू करता है तो सही बल्ले से दूर, IQueryable के साथ, आप सब कुछ है कि आप IEnumerable साथ कर सकते हैं कर सकते हैं। IQueryables अंतर्निहित डेटा स्रोत पर क्वेरी में कुछ लैम्ब्डा अभिव्यक्ति को परिवर्तित करने के साथ सौदा करता है - यह एक SQL डेटाबेस या ऑब्जेक्ट सेट हो सकता है।

असल में, आपको आमतौर पर एक IQueryable, या एक आईनेमरेबल होने पर एक तरफ या दूसरे की देखभाल नहीं करनी चाहिए।

6

उपयोगकर्ता के रूप में, आपको आमतौर पर परवाह नहीं करना चाहिए, यह वास्तव में डेटा स्रोत के कार्यान्वयनकर्ता के बारे में है। यदि डेटा प्रदाता केवल IENumerable लागू करता है, तो आप मूल रूप से निष्पादन के लिए LINQ कर रहे हैं, यानी यह संग्रह पर स्मृति संचालन में है। अभिव्यक्ति निष्पादित होने के बाद IQueryable अभिव्यक्ति के पेड़ को निष्पादन के वैकल्पिक परिणामों में अनुवाद करने की क्षमता प्रदान करता है (आमतौर पर गणना द्वारा), जो Linq2Sql, Linq2Xml और Linq2Entities करता है।

केवल समय मैं अंत उपयोगकर्ता देखभाल देख सकते हैं, अगर वे, अभिव्यक्ति पेड़ कि निष्पादित किया जाएगा का निरीक्षण करने के बाद से IQueryable अभिव्यक्ति को उजागर करता है इच्छा है। एक अन्य उपयोग प्रदाता का निरीक्षण कर सकता है। लेकिन उन दोनों परिदृश्यों को वास्तव में अन्य क्वेरी प्रदाताओं के कार्यान्वयनकर्ताओं के लिए आरक्षित किया जाना चाहिए और अभिव्यक्ति को बदलना चाहते हैं। लिंक का मुद्दा यह है कि आपको अभिव्यक्ति निष्पादन के कार्यान्वयन के बारे में परवाह नहीं करना चाहिए।

1

मैं आर्नी Claassen से सहमत हैं, जब आप डेटा स्रोतों द्वारा प्रदान अंतर्निहित implmentatoin के बारे में सोचने की जरूरत ऐसे मामले हैं। उदाहरण के लिए यह blog post देखें जो दिखाता है कि आईएन्यूमेरेबल और आईक्वायबल द्वारा जेनरेट किया गया एसक्यूएल कुछ परिदृश्यों में अलग है।

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