转换为linq时检查可以为空的xml值的问题

时间:2014-04-29 09:02:48

标签: c# xml linq

我尝试将xml Feed转换为linq,但在检索该元素的数据之前,我无法检查元素是否为null。我确信我的以下代码是正确的,但是xml的一行中缺少元素" ElementOne"它的孩子"元素",所以它在执行时抛出整个脚本。

此代码段不完整,但这是导致整个脚本出错的部分,是否有人能够发现为什么会出错?

from c in s.Element("ElementOne").Elements("ElementTwo")
    where s.Element("ElementOne") != null &&
          s.Element("ElementOne").Elements("ElementTwo") != null
              select new{
                  Id = (c.Attribute("Id") == null) ? 0 : (int)c.Attribute("Id")
              }

1 个答案:

答案 0 :(得分:1)

我只想将其更改为:

var query = s.Elements("ElementOne").Elements("ElementTwo")
             .Select(c => (int?) c.Attribute("Id") ?? 0);

(除非你真的需要匿名类型,为什么还要烦恼呢?)

如果没有ElementOne个元素,这只会给你一个空的结果。

如果您只想使用第一个ElementOne元素,即使有多个元素,您也可以使用:

var query = s.Elements("ElementOne").Take(1).Elements("ElementTwo")
             .Select(c => (int?) c.Attribute("Id") ?? 0);