निर्भर करता है कि आप linq क्वेरी सिंटैक्स को कितना पसंद करते हैं, आप सीधे एक्सटेंशन विधियों का उपयोग कर सकते हैं जैसे:
var item = Items.First(i => i.Id == 123);
और यदि आप कोई त्रुटि नहीं चाहते हैं यदि सूची खाली है, FirstOrDefaultतो तत्व प्रकार के लिए डिफ़ॉल्ट मान लौटाएं ( nullसंदर्भ प्रकारों के लिए):
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()और SingleOrDefault()इसका उपयोग भी किया जा सकता है, लेकिन अगर आप डेटाबेस या किसी ऐसी चीज़ से पढ़ रहे हैं, जो पहले से ही विशिष्टता की गारंटी देता है तो मैं परेशान नहीं होता क्योंकि यह देखने के लिए सूची को स्कैन करना होगा कि क्या कोई डुप्लिकेट और थ्रो है। First()और FirstOrDefault()पहले मैच पर रोक, इसलिए वे अधिक कुशल हैं।
की First()और Single()परिवार, यहाँ है, जहां वे फेंक:
First() - अगर खाली / नहीं मिला तो फेंकता है, अगर नकल नहीं करता है
FirstOrDefault() - यदि खाली / नहीं मिला तो डिफ़ॉल्ट रूप से रिटर्न देता है, यदि डुप्लिकेट नहीं है तो फेंक देता है
Single() - यदि खाली / नहीं मिला तो फेंकता है, यदि डुप्लिकेट मौजूद है तो फेंकता है
SingleOrDefault() - यदि कोई डुप्लिकेट मौजूद है, तो खाली / न मिलने पर डिफ़ॉल्ट लौटाता है
Single()औरSingleOrDefault()अगर मुझे पता है कि डेटा पहले से ही अद्वितीय है (उदाहरण के लिए एक डेटाबेस से जो कि बाधा है, आदि), क्योंकिSingle()यह संभावित डुप्लिकेट को खोजने के लिए बाकी सूची को स्कैन करने के लिए मजबूर करता है, लेकिन यह मैं ही हूं। यदि आपको इस बिंदु पर अपनी विशिष्टता को लागू करने की आवश्यकता हैSingle(), तो परिवार का उपयोग करें , यदि नहीं, तोFirst()परिवार का उपयोग करें ।