2012-08-03 13 views
24

मैं अपने कार्ट में मात्रा अपडेट कर रहा हूं, लेकिन यह अनुक्रम में फेंक रहा है कोई तत्व 'अपवाद नहीं है।हैंडलिंग 'अनुक्रम में कोई तत्व नहीं है' अपवाद

और मुझे नहीं पता कि इसका क्या अर्थ है। पहले तो मैंने सोचा कि शायद वहाँ एक शून्य मान कहीं पारित किया जा रहा था, लेकिन उस मामले, के रूप में मुझे लगता है कि देख लिया है नहीं है:

Sequence contains no elements Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error:

Line 35: var uid = WebSecurity.CurrentUserId; Line 36: var newqty = Request.Form["Quantity"]; Line 37:
OModel.Cart c = (from item in database.Carts Line 38:
where item.UserId == uid && item.PartNumber == pnumber && item.OrderId == oid Line 39: select item).First();

कोई भी विचार यह है कि क्या कारण हो सकता है

?

+1

आप शायद http://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq/1024577#1024577 – driis

+0

@driss I 'पढ़ना चाहेंगे जब मैं इसका उपयोग करना चाहता हूं, तो FirstOrDefault() का उपयोग कर रहा हूं, लेकिन जब मैं सीखना चाहता था कि अपडेट कैसे किया जाए, तो मुझे एक ब्लॉग मिला (वही जिसे मैंने जोड़ना और निकालना सीखा) - और उसने फर्स्टऑर्डडिल्ट() के बजाय पहले इस्तेमाल किया, तो मैंने इसके बजाय इसका इस्तेमाल किया। लेकिन FirstOrDefault() एक और अपवाद फेंकता है। इसलिए मुझे यकीन नहीं था कि इस मामले में किसके लिए इस्तेमाल किया जाना चाहिए, या अगर यह भी परिपक्व हो। – Arrow

उत्तर

53

First() यदि आपका चयन 0 पंक्तियां देता है तो इसका कारण बन रहा है। आपको या तो उस अपवाद को पकड़ना है, या FirstOrDefault() का उपयोग करना है जो किसी तत्व के मामले में शून्य नहीं लौटाएगा।

+0

धन्यवाद। यह समझ आता है। मुझे आश्चर्य है कि, यह _NULL_ क्यों लौटाएगा - यहां तक ​​कि मैंने जांच की है कि यह वास्तव में डेटाबेस में मौजूद है? क्या आप किसी तालिका में आइटम को अपडेट करने के किसी भी अन्य तरीके से जानते हैं? – Arrow

+0

आप संग्रहीत प्रक्रिया बना सकते हैं, इसे लिंक में मैप करें और इसके बजाय इसे कॉल करें। लेकिन मुझे नहीं लगता कि यह क्यों काम नहीं करेगा, बशर्ते सभी पैरामीटर ठीक हैं। एसक्यूएल प्रोफाइलर को वास्तव में निष्पादित करने के लिए आप एसक्यूएल प्रोफाइलर का उपयोग करने का प्रयास कर सकते हैं। इससे क्या गलत है खोजने में मदद करनी चाहिए। – Varius

+2

यदि यह वास्तव में डेटाबेस में मौजूद है और यह वापस नहीं किया जा रहा है तो यह शर्तों को संतुष्ट नहीं कर रहा है। क्या आप UserId == uid && PartNumber == pnumber && OrderId == oid का उपयोग कर रहे हैं? क्या आप सही प्रकार की जांच कर रहे हैं? – c0deNinja

9

आप LINQ का पहला() विधि है, जो as per the documentation एक InvalidOperationException फेंकता है तो आप एक खाली संग्रह पर बुला रहे हैं प्रयोग कर रहे हैं करने के लिए परिवर्तन यह।

यदि आप कभी-कभी अपनी क्वेरी के परिणाम को खाली होने की उम्मीद करते हैं, तो संभवतः आप FirstOrDefault() का उपयोग करना चाहते हैं, जो अपवाद फेंकने के बजाय, संग्रह खाली होने पर शून्य वापस आ जाएगा।

0

मान शून्य है, तो आप क्यों जांच करने के लिए ...

(समाधान यहाँ प्रस्तावित के कार्यान्वयन के अलावा) हार्डवेयर कनेक्शन की जाँच की है।

संबंधित मुद्दे