2013-08-08 5 views
5

Я пытаюсь решить проблему с использованием LINQ. Я вытаскиваю значение узла XML с помощью LINQ. Проблема, с которой я сталкиваюсь, заключается в том, что узел отсутствует в XML, я получаю ошибку Sequence contains no elements. Я попытался использовать DefaultIfEmpty, Singleordefault и Firstordefault. Но затем он выдает исключение nullpointer. Наверное, я не выше методов правильно. Как можно использовать один из них для решения поблема?LINQ: Последовательность не содержит элементов error

Вот код 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") после этого звонка, вы получите ошибку Sequence contains no elements, если используете Single или Null Reference Exception, если используете SingleOrDefault.

Что вы должны сделать, это вытащить вызов и проверьте результат на нуль:

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.

Смежные вопросы