प्रैक्टिस में, हाँ - LINQ कीवर्ड विस्तार विधियों के लिए मानचित्र। लेकिन वास्तव में, यह और अधिक दिलचस्प है; यह सचमुच है जैसे कि कुछ महत्वपूर्ण तरीकों के लिए सीधे संकलक विकल्प, यानी
var qry = from cust in db.Customers
where cust.IsActive
select cust;
हो जाता है:
var qry = db.Customers.Where(cust => cust.IsActive);
(अगर हम एक गैर तुच्छ का चयन करें, यह .Select जोड़ना होगा (था .. .कुछ प्रक्षेपण ...)
अलग अलग तरीकों के LINQ kewords मानचित्र - यानी OrderBy, GroupBy, ThenBy, OrderByDescending, आदि
के मामले में वहाँ है/IQueryable<T>
, इस तो विस्तार विधियों के माध्यम से इन का समाधान करता है (आमतौर पर Enumerable
/Queryable
के सौजन्य से) - हालांकि, अपने queryable वस्तुओं के लिए अपने स्वयं घोषित करता है, तो कहाँ/OrderBy/आदि तो इन वरीयता में आदत हो जाएगी।
जॉन स्कीट C# in Depth के उत्तरार्द्ध भागों में इस एक बहुत अधिक शामिल हैं। मैंने an example of Jon's भी देखा है जहां उन्होंने इस बारे में कुछ वास्तव में विचित्र प्रभावों पर चर्चा की - जैसे किसी प्रकार पर स्थैतिक विधियों को कॉल करना।
स्रोत
2008-10-10 11:49:32
चयन छोड़ना() सिर्फ एक अनुकूलन है। इसे अभी भी एक चयन() की आवश्यकता होती है जब भी यह चयन करने के लिए एक कॉल है (x => x); –
हां, लेकिन यह एक अनुकूलन है जो यह करता है। यदि आपके पास "var qry = x x x x x में x से" है, तो यह चयन छोड़ देगा - यानी "var qry = y.Select (x => x)" बन जाता है - हालांकि, अन्य कई सामान्य सरल मामलों में इसे छोड़ देंगे (जब तक कि आपके पास एक गैर-मामूली प्रक्षेपण न हो)। –