Установка значения по умолчанию при получении значений XML через Linq - PullRequest
1 голос
/ 19 августа 2010

Я использую Linq для извлечения значений из некоторого XML.Ниже показан упрощенный пример, показывающий мою проблему.Следующий код отлично работает с XML, показанным ниже.У меня проблема, когда отсутствует раздел groupBy.Потому что, когда он отсутствует, Data.Element("groupBy").Element("property) завершается неудачей, потому что Data.Element("groupBy") будет нулевымМожно ли изменить мой оператор Linq, чтобы он предоставлял значение по умолчанию, или к нему следует подходить иначе?

Ответы [ 2 ]

3 голосов
/ 19 августа 2010

Вы уже можете сделать его немного лучше, чем с помощью оператора объединения нулей. Однако справиться с отсутствующим элементом groupby сложнее:

select new Export
{    
    OutputFileName = (string) Data.Element("outputFileName") ?? "",
    GroupByProperty = Data.Element("groupBy") == null ? ""
           : (string) Data.Element("groupBy").Element("property") ?? ""
}).First();

Преобразование в строку просто возвращает ноль, если ссылка на элемент равна нулю.

Альтернативой будет:

GroupByProperty = 
    (string) Data.Elements("groupBy").Elements("property").FirstOrDefault() ?? ""

Использует метод расширения, который позволяет вам вызывать Elements для IEnumerable<XElement> ..., чтобы (лениво) оценивать последовательность каждого элемента property в элементе groupBy в Data затем возьмите первый из них, если таковой существует, и примените преобразование строк.

0 голосов
/ 19 августа 2010

Вы можете просто добавить дополнительную проверку в операторе (и немного очистить, используя оператор объединения нулей):

GroupByProperty = Data.Element("groupBy") != null ? 
    (Data.Element("groupBy").Element("property") ?? "") : "";
...