C# 转换为linq时检查可为null的xml值时出现问题

C# 转换为linq时检查可为null的xml值时出现问题,c#,xml,linq,C#,Xml,Linq,我试图将xml提要转换为linq,但在检索元素的数据之前,我很难检查元素是否为null。我确信我下面的代码是正确的,但xml的一行缺少元素“ElementOne”及其子元素“element”,因此执行时会抛出整个脚本 这段代码不完整,但这是导致整个脚本出错的部分,有人能发现为什么会出错吗 from c in s.Element("ElementOne").Elements("ElementTwo") where s.Element("ElementOne") != null &&

我试图将xml提要转换为linq,但在检索元素的数据之前,我很难检查元素是否为null。我确信我下面的代码是正确的,但xml的一行缺少元素“ElementOne”及其子元素“element”,因此执行时会抛出整个脚本

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

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")
              }

我只想把它改成:

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);