2013-08-08 7 views
5

मैं LINQ का उपयोग करने में त्रुटि हल करने का प्रयास कर रहा हूं। मैं LINQ का उपयोग कर एक एक्सएमएल नोड मान खींच रहा हूं। मुझे जिस समस्या का सामना करना पड़ रहा है वह है जब एक्सएमएल में नोड मौजूद नहीं है तो मुझे Sequence contains no elements त्रुटि मिल रही है। मैंने डिफ़ॉल्ट IfEmpty, सिंगलॉर्डिफॉल्ट, और फर्स्टॉर्डफॉल्ट का उपयोग करने का प्रयास किया। लेकिन फिर यह एक nullpointer अपवाद फेंकता है। मुझे लगता है कि मैं सही तरीके से ऊपर नहीं हूँ। पॉबलेम को हल करने के लिए इनमें से किसी एक का उपयोग कैसे कर सकते हैं?LINQ: अनुक्रम में कोई तत्व त्रुटि नहीं है

यहां LINQ कोड है जिसका मैं उपयोग कर रहा हूं।

var costnode6 = doc.Root.Descendants(ns + "SERVICEUPGRADES").Single(c => (string)c.Element(ns + "DELIVERYTIME") == "before 3:30 PM").Element(ns + "TOTAL_COST"); 
     var cost6 = (decimal)costnode6; 

उत्तर

6

OrDefault तरीकों प्रकार के लिए डिफ़ॉल्ट मान अगर कोई परिणाम है, जो अपने मामले में null होगा। इसका अर्थ यह है कि जब आप उस कॉल के बाद .Element(ns + "TOTAL_COST") करते हैं, तो या Null Reference Exception का उपयोग करते हुए का उपयोग करते समय आपको Sequence contains no elements त्रुटि मिल जाएगी।

आपको क्या करना चाहिए क्या कॉल बाहर निकालते हैं और अशक्त के खिलाफ परिणाम की जांच करें:

var deliveryTime = doc.Root.Descendants(ns + "SERVICEUPGRADES") 
    .SingleOrDefault(c => (string)c.Element(ns + "DELIVERYTIME") == "before 3:30 PM"); 
if(deliveryTime != null) 
{  
    var costnode6 = deliveryTime.Element(ns + "TOTAL_COST"); 
    var cost6 = (decimal)costnode6; 
} 
+0

worked..thanks कि !! – user2574121

3

उपयोग SingleOrDefault है, लेकिन फिर एक गार्ड खंड इस तरह, costnode6 उपयोग करने के लिए प्रयास करने से पहले है:

var costnode6 = doc.Root.Descendants(ns + "SERVICEUPGRADES").SingleOrDefault(c => (string)c.Element(ns + "DELIVERYTIME") == "before 3:30 PM").Element(ns + "TOTAL_COST"); 

if(costnode6 != null) 
{ 
    var cost6 = (decimal)costnode6; 
} 

यह उड़ा से अपने LINQ क्वेरी की रक्षा करेगा क्योंकि OrDefault क्वेरी परिणाम कर देगा null यदि बिल्कुल एक परिणाम नहीं मिला है; और if स्थिति आपको null ऑब्जेक्ट का उपयोग करने की कोशिश करने से बचाएगी।

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