परिणाम रिक्त होने पर LINQ क्या लौटाता है


319

मेरे पास LINQ क्वेरी के बारे में एक प्रश्न है। आम तौर पर एक क्वेरी एक IEnumerable<T>प्रकार देता है । यदि रिटर्न खाली है, तो निश्चित नहीं है कि यह शून्य है या नहीं। मुझे यकीन नहीं है कि यदि परिणाम में कुछ नहीं मिला तो निम्नलिखित ToList()एक अपवाद या सिर्फ एक खाली फेंक देगा ?List<string>IEnumerable

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

मुझे पता है कि यह एक बहुत ही सरल प्रश्न है, लेकिन मेरे पास समय के लिए वीएस उपलब्ध नहीं है।


11
मुझे लगता है कि परिणाम Enumerable.Empty है?
डेविड.छू.का

जवाबों:


512

यह एक खाली enumerable लौटेगा। यह अशक्त नहीं होगा। आप ध्वनि सो सकते हैं :)


38

आप .Any()विधि भी देख सकते हैं :

if (!YourResult.Any())

बस एक नोट जो .Anyअभी भी डेटाबेस से रिकॉर्ड प्राप्त करेगा; कर रहा .FirstOrDefault()/.Where()है बस के रूप में ज्यादा उपरि हो जाएगा, लेकिन फिर आप क्वेरी से लौटे वस्तु (ओं) को पकड़ने में सक्षम होंगे


5
प्रश्न कहां डेटाबेस का उल्लेख करता है?
cja

4
आपको उस व्यक्ति से पूछना होगा जिसने संपादित किया, मैंने किसी भी DB का उल्लेख नहीं किया :)
Noich

प्वाइंट एडिटर बना रहा है ध्वनि, हालांकि, डीबी या नहीं। मेरा मानना ​​है कि वे कह रहे हैं कि .Any()यदि आपके पास कोई मिलान रिकॉर्ड है, तो आपको यह बताने की जरूरत है कि एक विशिष्ट मूल्य खोजने के लिए वास्तविक क्वेरी करना संभव .Any()नहीं है।
vapcguy

1
संपादन वास्तव में गलत हो सकता है। यदि संस्थाओं के लिए linq का उपयोग करते हैं, तो db इसे शॉर्टकट कर सकता है और ग्राहक को कोई भी डेटा सही या गलत के अलावा नहीं भेजा जा सकता है
Mafii

19
var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(डंप LinqPad से है )


बिल्कुल सही! आपको निष्कर्षों का बेहतर संकेत मिलता है
नेटफेड

TIL Count()भी एक विधि है, न कि केवल संपत्ति
heyNow

2
क्या आपको उपयोग नहीं करना चाहिए। किसी भी चीज की गणना सभी वस्तुओं के माध्यम से होगी?
SHEePYTaGGeRNeP


8

Linq-to-SQL में यदि आप क्वेरी पर पहला तत्व प्राप्त करने का प्रयास करते हैं, तो आपको कोई परिणाम नहीं मिलेगा sequence contains no elements। मैं आपको आश्वस्त कर सकता हूं कि उल्लिखित त्रुटि के बराबर नहीं है object reference not set to an instance of an object। निष्कर्ष संख्या में, यह अशक्त नहीं लौटेगा क्योंकि शून्य यह नहीं कह सकता है कि sequence contains no elementsयह हमेशा कहेगा object reference not set to an instance of an object;)


1
ओह, आपका स्पष्टीकरण आगे समझने में मदद करता है। धन्यवाद !
काई ली

क्या यह सवाल का जवाब देता है?
चीटव्यूपेंसिल्स

7

यहां अन्य पोस्टों ने यह स्पष्ट कर दिया है कि परिणाम एक "खाली" IQueryable है, जिसे ToList () सही ढंग से एक खाली सूची आदि में बदल देगा।

कुछ ऑपरेटरों के साथ सावधान रहें, क्योंकि वे फेंक देंगे यदि आप उन्हें एक खाली गणना भेजते हैं। यह तब हो सकता है जब आप उन्हें एक साथ जंजीर देते हैं।


3
"कुछ ऑपरेटरों के साथ सावधान रहें, क्योंकि वे फेंक देंगे यदि आप उन्हें एक खाली भेजने योग्य भेजते हैं। यह तब हो सकता है जब आप उन्हें एक साथ चेन करते हैं।" - मुझे यही मिला है। मेरे पास एक शून्य लौटाया गया मूल्य था जिसे मैंने फिर एक और क्वेरी में खिलाया। इससे दूसरी क्वेरी को कोई फर्क नहीं पड़ता कि मैंने उसे क्या डाला क्योंकि दूसरी क्वेरी में कोई मूल्य नहीं था।
trevorc

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.