को लागू करने LINQ बस ऐसे Where
या Select
जैसे तरीकों LINQ हो जाने की उम्मीद सही हस्ताक्षरों के साथ,, को लागू करने का मतलब है। सामान्य धारणा के बावजूद, आपको LINQ का समर्थन करने के लिए अपनी कक्षा के लिए IEnumerable
इंटरफ़ेस को लागू करने की आवश्यकता नहीं है। हालांकि, IEnumerable
लागू करने से स्वचालित रूप से आपको Enumerable
कक्षा पर LINQ विधियों का पूरा सेट लगभग मुफ्त में प्राप्त करेगा - आपको केवल GetEnumerator
और IEnumerator
कक्षा लागू करना होगा।
इस पोस्ट में the Iterator pattern पर इस ब्लॉग में IEnumerable
को कार्यान्वित करने के कुछ उदाहरण हैं।
हालांकि, अगर आपकी कक्षा के लिए यह समझ में नहीं आता है, तो आपको ऐसा करने की आवश्यकता नहीं है। आपको बस उचित LINQ विधियों को सीधे लागू करने की आवश्यकता है। LINQ वास्तव में परवाह नहीं करता है कि विधियों को कैसे परिभाषित किया जाता है, जब तक सी # संकलित करता है। यही कारण है, अगर आप लिखते हैं:
mpPlist.Where(p => p.Thing == "Thing").Select(p => p);
जब तक कि संकलित रूप में, LINQ काम करेगा:
from p in myPlist where p.Thing == "Thing" select p;
सी # संकलक में इस अनुवाद करता है। विधियों के लिए सही हस्ताक्षर देखने के लिए, एमएसडीएन दस्तावेज के list of LINQ query methods के रूप में देखें। उदाहरण के लिए (मान लेते हैं कि अपने PList
PListItem
रों की एक सूची थी):
public class PList
{
public IEnumerable<PListItem> Where(Func<PListItem, bool> predicate)
{
foreach (var item in this.items)
{
if (predicate(item))
{
yield return item;
}
}
}
}
LINQ को लागू करते समय इस तरह से सीधे आप यह कैसे बर्ताव करता है पर एक बहुत अधिक नियंत्रण देता है, यह एक बहुत अधिक इसे पाने के लिए काम है ठीक है, और आपको अपने रिटर्न वैल्यू के प्रभावों को समझने और LINQ कॉल इत्यादि को समझने की आवश्यकता है। आम तौर पर, यदि आप अपनी कक्षा को IEnumerable
लागू करने से दूर हो सकते हैं और सी # को आपके लिए सभी काम करने दें, तो चीजें बहुत आसान हो जाती हैं।
स्रोत
2012-06-17 03:23:27
बीटीडब्ल्यू, अच्छा ब्लॉग पोस्ट! –