2013-09-18 6 views
1

Я использую LINQ около 2 дней, поэтому, пожалуйста, несите меня.LINQ to XML - проверить значение null?

Вот мой текущий код;

_resultList = (
from 
    item in _documentRoot.Descendants("MyItems") 
select 
    new MyClass 
    { 
     XMLID = item.Attribute("id").Value 
    }).ToList<MyClass>(); 

Большинство элементов имеют атрибут 'id', и они успешно добавляются в список. Некоторые, однако, не имеют идентификатора. Для этого я бы хотел, чтобы «id» был пустой строкой.

Как проверить, существует ли атрибут, прежде чем пытаться получить к нему доступ? благодаря

ответ

5

Вы можете хранить его в переменной и на основе того, эта переменная нуль определяют значение XMLID собственности:

from item in _documentRoot.Descendants("MyItems") 
let idAttr = item.Attribute("id") 
select new MyClass 
{ 
    XMLID = idAttr != null ? idAttr.Value : string.Empty 
}).ToList<MyClass>(); 
8

Вам не нужно хранить атрибут в дополнительной переменной. Если атрибута нет, то casting attribute to string вернет null. С мощностью null-coalescing operator вы можете указать значение по умолчанию - пустую строку:

from item in _documentRoot.Descendants("MyItems") 
select new MyClass { 
     XMLID = (string)item.Attribute("id") ?? "" 
    }