LINQ: फ़िल्टरिंग मापदंड के साथ SingleOrDefault बनाम FirstOrDefault () का उपयोग कब करें


505

IEnumerable विस्तार के तरीकों पर विचार करें SingleOrDefault()औरFirstOrDefault()

MSDN दस्तावेज़ जोSingleOrDefault :

अनुक्रम खाली होने पर अनुक्रम का एकमात्र तत्व या डिफ़ॉल्ट मान लौटाता है; यदि अनुक्रम में एक से अधिक तत्व हैं, तो यह विधि एक अपवाद को फेंकती है।

जबकि FirstOrDefaultसे MSDN (संभवतः जब एक का उपयोग कर OrderBy()या OrderByDescending()बिल्कुल भी या नहीं),

किसी अनुक्रम का पहला तत्व देता है

मुट्ठी भर उदाहरण प्रश्नों पर विचार करें, यह स्पष्ट नहीं है कि इन दो विधियों का उपयोग कब करना है:

var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE

var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?

var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?

सवाल

आप क्या परंपराओं का पालन या सुझाव है है जब उपयोग के लिए निर्णय लेने SingleOrDefault()और FirstOrDefault()अपने LINQ प्रश्नों में?

जवाबों:


465

जब भी आप उपयोग करते हैं SingleOrDefault, तो आप स्पष्ट रूप से कहते हैं कि क्वेरी को एक ही परिणाम में परिणाम करना चाहिए । दूसरी ओर, जब FirstOrDefaultउपयोग किया जाता है, तो क्वेरी किसी भी परिणाम को वापस कर सकती है लेकिन आप कहते हैं कि आप केवल पहले वाला चाहते हैं।

मैं व्यक्तिगत रूप से शब्दार्थ को बहुत अलग पाता हूं और अपेक्षित परिणामों के आधार पर उपयुक्त एक का उपयोग करके पठनीयता में सुधार करता है।


164
एक बहुत महत्वपूर्ण अंतर यह है कि यदि आप एक से अधिक तत्वों के साथ एक अनुक्रम पर सिंगलऑर्फ़ॉल्ट का उपयोग करते हैं, तो यह एक अपवाद फेंकता है।
कामरान बिगडेल

17
@kami अगर यह एक अपवाद नहीं फेंकता है तो यह बिल्कुल फर्स्टऑडफॉल्ट की तरह होगा। अपवाद यह है कि यह SingleOrDefault बनाता है। अच्छा बिंदु यह ऊपर ला रहा है, और मतभेदों के ताबूत पर एक कील डालता है।
Fabio S.

17
मुझे कहना होगा कि प्रदर्शन के आधार पर, FirstOrDefault, SingleOrDefault की तुलना में लगभग 10 गुना तेजी से काम कर रहा है, 9,000,000 तत्वों की सूची <MyClass> का उपयोग करते हुए, वर्ग में 2 पूर्णांक होते हैं और फंक में इन दो पूर्णांकों की खोज होती है। एक लूप में 200 बार सर्च करने पर var v = list पर 22 सेकंड लगे। और var v = list.FirstOrDefault (x => x.Id1 == i && x.Id2 = i); लगभग 3 सेकंड
चेन

6
@BitsandBytesHandyman यदि SignleOrDefault एक अपवाद नहीं फेंकता है, जब अनुक्रम में एक से अधिक आइटम होते हैं तो यह FirstOrDefault की तरह व्यवहार नहीं करेगा। यदि अनुक्रम खाली है तो FirstOrDefault पहला आइटम लौटाता है, या अशक्त होता है। SingleOrDefault को केवल एक ही आइटम वापस करना चाहिए, या यदि क्रम खाली है या शून्य है, तो इसमें एक से अधिक आइटम हैं, बिना किसी अपवाद को फेंक दिए।
थानिस इयोनिडिस

2
@RSW हां, मुझे इसकी जानकारी है। मेरी टिप्पणी को ध्यान से पढ़ते हुए, मैं कह रहा था कि SingleOrDefault को क्या करना चाहिए, क्या नहीं। लेकिन निश्चित रूप से, इसे क्या करना चाहिए, बहुत व्यक्तिपरक है। मेरे लिए, "SomeOrDefault" पैटर्न का अर्थ है: "कुछ" का मूल्य प्राप्त करें। यदि "कुछ" मान वापस करने में विफल रहता है, तो डिफ़ॉल्ट मान लौटाएं। जिसका अर्थ है कि डिफ़ॉल्ट मूल्य को उस स्थिति में भी लौटाया जाना चाहिए, जहां "कुछ" अपवाद छोड़ देगा। इसलिए, जहां सिंगल एक अपवाद को फेंक देगा, वहीं SingleOrDefault को मेरे परिप्रेक्ष्य में, डिफ़ॉल्ट मान वापस करना चाहिए।
थानासिस इओनिडिस

585

यदि आपका परिणाम सेट 0 रिकॉर्ड देता है:

  • SingleOrDefault प्रकार के लिए डिफ़ॉल्ट मान लौटाता है (उदाहरण के लिए डिफ़ॉल्ट 0 है)
  • FirstOrDefault प्रकार के लिए डिफ़ॉल्ट मान लौटाता है

यदि आप परिणाम 1 रिटर्न सेट करते हैं:

  • SingleOrDefault उस रिकॉर्ड को लौटाता है
  • FirstOrDefault उस रिकॉर्ड को लौटाता है

यदि आपका परिणाम सेट कई रिकॉर्ड लौटाता है:

  • SingleOrDefault एक अपवाद फेंकता है
  • FirstOrDefault पहला रिकॉर्ड लौटाता है

निष्कर्ष:

यदि आप अपवाद को फेंकना चाहते हैं यदि परिणाम सेट में कई रिकॉर्ड हैं, तो उपयोग करें SingleOrDefault

यदि आप हमेशा 1 रिकॉर्ड चाहते हैं, तो कोई फर्क नहीं पड़ता कि परिणाम सेट में क्या है, का उपयोग करें FirstOrDefault


6
मैं सुझाव दूंगा कि यह वास्तव में दुर्लभ है क्योंकि अपवाद सबसे पहले FirstOrDefault को पसंद किया जाएगा। मुझे पता है कि ऐसे मामलों का अस्तित्व नहीं होगा जो अक्सर इमो होते हैं।
मिकुल्ल्स

FirstOrDefaultक्या पहले रिकॉर्ड का मतलब है नया रिकॉर्ड (आखिरी) / पुराना रिकॉर्ड (पहला)? यू मुझे स्पष्ट कर सकता है?
डुक

@ डूक, यह इस बात पर निर्भर करता है कि आप रिकॉर्ड्स को कैसे सॉर्ट करते हैं। FirstOrDefault को कॉल करने से पहले आप OrderBy () या OrderByDescending () आदि का उपयोग कर सकते हैं। ओपी का कोड उदाहरण देखें।
गण

5
मुझे भी यह जवाब पसंद है। विशेष रूप से यह देखते हुए कि कुछ ऐसे अवसर हैं जहाँ आप वास्तव में अपवाद को फेंकना चाहते हैं क्योंकि आप उस दुर्लभ मामले को अन्यत्र ठीक से संभालने का इरादा रखते हैं क्योंकि यह सिर्फ दिखावा नहीं है। जब आप अपवाद चाहते हैं तो आप यह स्पष्ट रूप से कह रहे हैं, और अन्य लोगों को भी संभालने के लिए मजबूर कर रहे हैं ताकि समग्र प्रणाली को और अधिक मजबूत बनाया जा सके।
फ्रांसिस रोडर्स 15

यह बहुत स्पष्ट रूप से कहा गया है ताकि व्यक्ति आसानी से समझ सके।
नीरव वसोया

243

वहाँ है

  • एक शब्दार्थिक अंतर
  • एक प्रदर्शन अंतर

दोनों के बिच में।

शब्दार्थ भेद:

  • FirstOrDefault संभावित एकाधिक (या यदि कोई मौजूद नहीं है तो डिफ़ॉल्ट) का पहला आइटम लौटाता है।
  • SingleOrDefaultमान लेता है कि कोई एकल आइटम है और इसे वापस लौटाता है (या डिफ़ॉल्ट यदि कोई मौजूद नहीं है)। एकाधिक आइटम अनुबंध का उल्लंघन हैं, एक अपवाद फेंक दिया गया है।

प्रदर्शन अंतर

  • FirstOrDefaultयह आमतौर पर तेजी से होता है, यह तब तक पुनरावृत्त होता है जब तक कि यह तत्व को नहीं ढूंढता है और केवल जब इसे नहीं खोजता है तो इसे पूरी तरह से गणना करना पड़ता है। कई मामलों में, एक आइटम खोजने के लिए एक उच्च संभावना है।

  • SingleOrDefaultयह जांचने की जरूरत है कि क्या केवल एक ही तत्व है और इसलिए हमेशा पूरे एन्यूमरेट को पुनरावृत्त करता है। सटीक होने के लिए, यह तब तक पुनरावृत्त होता है जब तक कि यह एक दूसरा तत्व नहीं पाता है और एक अपवाद को फेंकता है। लेकिन ज्यादातर मामलों में, कोई दूसरा तत्व नहीं है।

निष्कर्ष

  • उपयोग करें FirstOrDefaultयदि आप परवाह नहीं करते हैं कि कितने आइटम हैं या जब आप अनूठेपन की जांच नहीं कर सकते हैं (जैसे बहुत बड़े संग्रह में)। जब आप आइटम को संग्रह में जोड़ने पर विशिष्टता की जांच करते हैं, तो उन वस्तुओं की खोज करते समय इसे फिर से जांचना बहुत महंगा हो सकता है।

  • उपयोग करें SingleOrDefaultयदि आपको प्रदर्शन के बारे में बहुत अधिक ध्यान रखने की आवश्यकता नहीं है और यह सुनिश्चित करना चाहते हैं कि किसी एकल आइटम की धारणा पाठक को स्पष्ट हो और रनटाइम पर जाँच की जाए।

व्यवहार में, आप उन मामलों में भी First/ FirstOrDefaultअक्सर उपयोग करते हैं, जब आप प्रदर्शन में सुधार के लिए किसी एक आइटम को ग्रहण करते हैं। आपको अभी भी याद रखना चाहिए कि Single/ SingleOrDefaultपठनीयता में सुधार कर सकता है (क्योंकि यह एक एकल आइटम की धारणा बताता है) और स्थिरता (क्योंकि यह इसे जांचता है) और इसे उचित रूप से उपयोग करता है।


16
+1 "या जब आप अनूठेपन की जाँच नहीं कर सकते (उदाहरण के लिए बहुत बड़े संग्रह में)।" । मुझे इसकी तलाश थी। मैं क्वेरी बनाते समय डालने के बजाए , और / या डिज़ाइन द्वारा विशिष्टता लागू करूंगा !
नवाज

SingleOrDefaultLinq का उपयोग करते समय मैं बहुत सी वस्तुओं पर पुनरावृत्तियों की कल्पना कर सकता हूं , लेकिन SingleOrDefaultअगर उदाहरण के लिए Linq किसी डेटाबेस से बात कर रहा है, तो अधिकांश 2 वस्तुओं पर पुनरावृति नहीं होती है? बस सोच रहा था ..
मेमेत ऑलसेन

3
@memetolsen LINQ to SQL के साथ दो के लिए कोड थूक पर विचार करें - FirstOrDefault Top 1 का उपयोग करता है। SingleOrDefault Top 2 का उपयोग करता है
जिम वूले

@JimWooley मुझे लगता है कि मैंने 'एनुमेरबल' शब्द को गलत समझा है। मुझे लगा कि स्टीफन का मतलब सी # है Enumerable
मेमट ऑलसेन

1
मूल उत्तर के संदर्भ में @memetolsen सही है, आपकी टिप्पणी डेटाबेस का संदर्भ दे रही थी, इसलिए मैं पेशकश कर रहा था कि प्रदाता से क्या होता है। जबकि .Net कोड केवल 2 मानों पर निर्भर करता है, डेटाबेस कई रिकॉर्डों की यात्रा करता है, जब तक कि इसे दूसरे एक मानदंड को पूरा करने की आवश्यकता होती है।
जिम वूले

76

किसी ने भी उल्लेख नहीं किया है कि SQL में अनुवादित FirstOrDefault TOP 1 रिकॉर्ड करता है, और SingleOrDefault TOP 2 करता है, क्योंकि यह जानना आवश्यक है कि 1 से अधिक रिकॉर्ड है।


3
जब मैंने LinqPad और VS के माध्यम से एक सिंगलऑर्डफॉल्ट चलाया, तो मुझे सेलेक्ट टॉप 2 कभी नहीं मिला, फ़र्स्टऑफ़डेफ़ल के साथ मैं सेलेक्ट टॉप 1 प्राप्त करने में सक्षम था, लेकिन जहाँ तक मैं आपको बता सकता हूँ कि आपको
सेलेक्ट

अरे मुझे लिनकैप में भी आजमाया गया है और एसक्यूएल क्वेरी ने मुझे डर दिया है क्योंकि यह पूरी तरह से सभी पंक्तियों को प्राप्त करता है। मुझे यकीन नहीं है कि यह कैसे हो सकता है?
AnyOne

1
यह पूरी तरह से उपयोग किए गए LINQ प्रदाता पर निर्भर करता है। उदाहरण के लिए, LINQ से SQL और LINQ से एंटिटीज SQL में अलग-अलग तरीकों से अनुवाद कर सकते हैं। मैं बस IQ MySql प्रदाता के साथ LINQPad की कोशिश की, और FirstOrDefault()कहते हैं, LIMIT 0,1जबकि SingleOrDefault()कुछ भी नहीं कहते हैं।
लुकास

1
EF Core 2.1, FirstOrDefault को Select TOP (1), SingleOrDefault को
Select

19

LINQ के लिए -> SQL:

SingleOrDefault

  • उन उपयोगकर्ताओं से "चयन करें" जैसी क्वेरी उत्पन्न करेगा जहाँ उपयोगकर्ता = 1 "
  • मिलान रिकॉर्ड का चयन करें, एक से अधिक रिकॉर्ड पाए जाने पर अपवाद फेंकता है
  • यदि आप प्राथमिक / अद्वितीय कुंजी कॉलम के आधार पर डेटा ला रहे हैं तो उपयोग करें

FirstOrDefault

  • उन उपयोगकर्ताओं से "शीर्ष 1 * चुनें" जैसी क्वेरी उत्पन्न करेगा जहां उपयोगकर्ता = 1 "
  • पहली मिलान पंक्तियों का चयन करें
  • यदि आप गैर-प्राथमिक / अद्वितीय कुंजी कॉलम के आधार पर डेटा ला रहे हैं तो उपयोग करें

मुझे लगता है कि आपको SingleOrDefault से "सभी मिलान पंक्तियों का चयन करें" हटा देना चाहिए
Saim Abdullah

10

मैं उन SingleOrDefaultस्थितियों में उपयोग करता हूं जहां मेरा तर्क बताता है कि इच्छा या तो शून्य होगी या एक परिणाम। यदि अधिक हैं, तो यह एक त्रुटि स्थिति है, जो सहायक है।


3
अक्सर मुझे लगता है कि SingleOrDefault () उन मामलों को उजागर करता है जहां मैंने परिणाम सेट पर सही फ़िल्टरिंग लागू नहीं किया है, या जहां अंतर्निहित डेटा में दोहराव के साथ कोई समस्या है। पहले की तुलना में अधिक बार मैं खुद को सिंगल () और सिंगलऑर्डीफॉल्ट () का उपयोग करके नहीं पाता।
टिम्स

LINQ पर सिंगल () और SingleOrDefault () के ऑब्जेक्ट्स के लिए प्रदर्शन निहितार्थ हैं यदि आपके पास बहुत बड़ी गणना योग्य है, लेकिन डेटाबेस से बात करते समय (जैसे SQL सर्वर) यह एक शीर्ष 2 कॉल करेगा और यदि आप अनुक्रमित हैं तो इसे सही ढंग से सेट किया गया है। कॉल महंगा नहीं होना चाहिए और मैं पहले तेज़ (या) या FirstOrDefault () कॉल करते समय गलत डुप्लिकेट लेने के बजाय संभवतः अन्य डेटा समस्याओं को शुरू करने के बजाय तेजी से विफल हो जाता हूं और डेटा समस्या का पता लगाता हूं।
हार्टलैंडकोडर

5

SingleOrDefault: आप कह रहे हैं कि "सबसे अधिक" क्वेरी या डिफ़ॉल्ट से मेल खाता कोई एक आइटम है FirstOrDefault: आप कह रहे हैं कि "कम से कम" एक आइटम क्वेरी या डिफ़ॉल्ट से मेल खाता है

यह कहें कि अगली बार ज़ोर से आपको चुनने की ज़रूरत है और आप समझदारी से चुनाव करेंगे। :)


5
वास्तव में कोई परिणाम नहीं होना FirstOrDefault. More correctly: FirstOrDefault` = परिणाम के किसी भी संख्या का पूरी तरह से स्वीकार्य उपयोग है लेकिन मैं केवल पहले एक के बारे में परवाह करता हूं, कोई परिणाम नहीं हो सकता है। SingleOrDefault= 1 या 0 परिणाम हैं, अगर वहाँ अधिक हैं इसका मतलब है कि कहीं न कहीं एक त्रुटि है। First= कम से कम एक परिणाम है, और मुझे यह चाहिए। Single= बिल्कुल 1 परिणाम है, कोई अधिक नहीं, कोई कम नहीं है, और मुझे वह चाहिए।
डेवि 8

4

आपके मामलों में, मैं निम्नलिखित का उपयोग करूंगा:

ID == 5 द्वारा चयन करें: यहां OneOrDefault का उपयोग करना ठीक है, क्योंकि आपको एक [या कोई नहीं] इकाई की उम्मीद है, अगर आपको ID 5 के साथ एक से अधिक इकाई मिली है, तो कुछ गलत है और निश्चित रूप से योग्य है।

ऐसे लोगों की खोज करते समय जिनका पहला नाम "बॉबी" के बराबर होता है, एक से अधिक (संभवतः मैं सोचता हूं) हो सकता है, इसलिए आपको न तो सिंगल का उपयोग करना चाहिए और न ही पहले, जहां-जहां ऑपरेशन (यदि "बॉबी" रिटर्न के साथ चयन करें, तो कई संस्थाएं, उपयोगकर्ता को अपनी खोज को परिष्कृत करना होगा या वापस किए गए परिणामों में से एक चुनना होगा)

निर्माण तिथि के क्रम को भी कहां-ऑपरेशन के साथ किया जाना चाहिए (केवल एक इकाई होने की संभावना नहीं है, छँटाई बहुत उपयोग की नहीं होगी;) इसका मतलब यह है कि आप चाहते हैं कि सभी इकाइयां क्रमबद्ध हों - यदि आप सिर्फ एक चाहते हैं, तो FirstOrDefault का उपयोग करें; यदि आप एक से अधिक इकाई प्राप्त करते हैं तो सिंगल हर बार फेंक देगा।


3
मैं असहमत हूं। यदि आपकी डेटाबेस आईडी एक प्राथमिक कुंजी है, तो डेटाबेस पहले से ही विशिष्टता को लागू कर रहा है। हर चक्र पर डेटाबेस अपना काम कर रहा है या नहीं यह जांचने के लिए सीपीयू चक्र बर्बाद करना सिर्फ मूर्खतापूर्ण है।
जॉन हेंकेल

4

दोनों तत्व संचालक हैं और एक क्रम से एक ही तत्व का चयन करने के लिए उनका उपयोग किया जाता है। लेकिन उनके बीच एक मामूली अंतर है। SingleOrDefault () ऑपरेटर एक अपवाद को फेंक देगा यदि एक से अधिक तत्व उस स्थिति से संतुष्ट हैं जहां FirstOrDefault () उसी के लिए कोई अपवाद नहीं फेंकेगा। यहाँ उदाहरण है।

List<int> items = new List<int>() {9,10,9};
//Returns the first element of a sequence after satisfied the condition more than one elements
int result1 = items.Where(item => item == 9).FirstOrDefault();
//Throw the exception after satisfied the condition more than one elements
int result3 = items.Where(item => item == 9).SingleOrDefault();

2
"उनके बीच एक मामूली अंतर है" - यह प्रमुख है!
निखिल वर्तक

3

अपने अंतिम उदाहरण में:

var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or doesn't matter?

हाँ यह करता है। यदि आप उपयोग करने की कोशिश करते हैं SingleOrDefault()और रिकॉर्ड से अधिक क्वेरी परिणाम आपको मिलता है और अपवाद होता है। केवल समय SingleOrDefault()जब आप सुरक्षित रूप से उपयोग कर सकते हैं , जब आप केवल 1 और केवल 1 परिणाम की उम्मीद कर रहे हैं ...


यह सही है। यदि आप 0 परिणाम प्राप्त करते हैं, तो आपको एक अपवाद भी मिलता है।
डेनिस रॉन्गो

1

तो जैसा कि मैं अब समझता हूं, SingleOrDefault अच्छा होगा यदि आप उन डेटा के लिए क्वेरी कर रहे हैं जो अद्वितीय होने की गारंटी है यानी प्राथमिक कुंजी के लिए DB बाधाओं द्वारा लागू किया गया है।

या प्राथमिक कुंजी के लिए क्वेरी करने का एक बेहतर तरीका है।

मेरा TableAcc मान लिया गया है

AccountNumber - Primary Key, integer
AccountName
AccountOpenedDate
AccountIsActive
etc.

और मैं एक के लिए क्वेरी करना चाहता हूं AccountNumber 987654, मैं उपयोग करता हूं

var data = datacontext.TableAcc.FirstOrDefault(obj => obj.AccountNumber == 987654);

1

मेरी राय FirstOrDefaultमें बहुत अधिक इस्तेमाल किया जा रहा है। अधिकांश मामलों में जब आप डेटा को फ़िल्टर कर रहे होते हैं, तो आप या तो अपने अद्वितीय पहचानकर्ता द्वारा तार्किक स्थिति या एकल अद्वितीय तत्व से मेल खाते तत्वों का एक संग्रह प्राप्त करने की अपेक्षा करेंगे - जैसे कि उपयोगकर्ता, पुस्तक, पोस्ट आदि ... क्यों कि हम यह भी कह सकते हैं कि FirstOrDefault()एक कोड गंध है क्योंकि ऐसा नहीं है कि इसमें कुछ गड़बड़ है लेकिन क्योंकि इसका उपयोग अक्सर किया जा रहा है। यह ब्लॉग पोस्ट विवरण में विषय की पड़ताल करता है। IMO अधिकांश समय SingleOrDefault()एक बेहतर विकल्प होता है इसलिए इस गलती को देखें और सुनिश्चित करें कि आप सबसे उपयुक्त विधि का उपयोग करें जो स्पष्ट रूप से आपके अनुबंध और अपेक्षाओं का प्रतिनिधित्व करती है।


-1

एक बात जो प्रतिक्रियाओं में याद आती है ...।

यदि कई परिणाम हैं, तो बिना किसी ऑर्डर के FirstOrDefault अलग-अलग परिणाम वापस ला सकता है जिसके आधार पर कभी भी सर्वर द्वारा उपयोग की जाने वाली इंडेक्स स्ट्रैटेजी हुई थी।

व्यक्तिगत रूप से मैं FirstOrDefault को कोड में देखकर नहीं खड़ा हो सकता क्योंकि मेरे अनुसार यह कहता है कि डेवलपर ने परिणामों की परवाह नहीं की। एक आदेश के साथ हालांकि यह नवीनतम / जल्द से जल्द लागू करने के तरीके के रूप में उपयोगी हो सकता है। मुझे फर्स्टऑडफॉल्ट का उपयोग कर लापरवाह डेवलपर्स के कारण बहुत सारे मुद्दों को ठीक करना पड़ा है।


-2

मैंने Google को GitHub पर विभिन्न विधियों के उपयोग के लिए समझा। यह प्रत्येक विधि के लिए Google खोज क्वेरी चलाने और github.com डोमेन और .cs फ़ाइल एक्सटेंशन को क्वेरी "साइट: github.com फ़ाइल: सीएस ..." का उपयोग करके सीमित करने के द्वारा किया जाता है।

ऐसा लगता है कि पहले * तरीके एकल * विधियों की तुलना में अधिक सामान्यतः उपयोग किए जाते हैं।

| Method               | Results |
|----------------------|---------|
| FirstAsync           |     315 |
| SingleAsync          |     166 |
| FirstOrDefaultAsync  |     357 |
| SingleOrDefaultAsync |     237 |
| FirstOrDefault       |   17400 |
| SingleOrDefault      |    2950 |

-8

मुझे समझ में नहीं आ रहा है कि FirstOrDefault(x=> x.ID == key)जब आप इसका उपयोग करते हैं तो यह परिणाम कितनी तेज़ी से प्राप्त कर सकता है Find(key)। यदि आप तालिका की प्राथमिक कुंजी के साथ क्वेरी कर रहे हैं, तो अंगूठे का नियम हमेशा उपयोग करना है Find(key)FirstOrDefaultजैसे कि सामान (x=> x.Username == username)आदि के लिए इस्तेमाल किया जाना चाहिए

यह एक गिरावट के लायक नहीं था क्योंकि प्रश्न की हेडिंग DB या Linq से List / IEnumable आदि पर Linq के लिए विशिष्ट नहीं थी।


1
किस नाम स्थान पर Find()है?
पी.कैम्पबेल

क्या आप हमें बता सकते हैं? अभी भी जवाब का इंतजार है।
डेनी

यह हो सकता है: stackoverflow.com/questions/14032709/…
Jeppe

शब्द "IEnumerable" प्रश्न शरीर की पहली पंक्ति में है। यदि आप केवल शीर्षक और वास्तविक प्रश्न नहीं पढ़ते हैं, और परिणामस्वरूप गलत उत्तर पोस्ट करते हैं, तो यह आपकी गलती है और IMO को कम करने का एक बिल्कुल वैध कारण है।
F1Krazy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.