XDocument中的条件linq查询

时间:2015-07-30 08:34:03

标签: c# lambda linq-to-xml

我有一个代码:

jobdetails.group = TM_item.Group_xml.ToString(); //XML
var xDoc = XDocument.Parse(jobdetails.group);
var data = xDoc.Root.Elements().OrderBy(x => (string)x.Attribute("name"));

XML:

<Groups>
      <Group name="Front0">
        <Room_type>Front</Room_type>
        <Dimension>Not available</Dimension>
        <Status>PENDING</Status>
        <Notes>None</Notes>
        <User>r2g</User>
        <Audio_length>00:00:00</Audio_length>
        <Image_count>1</Image_count>
        <Section_count>0</Section_count>
      </Group>
</Groups>

我想在xDoc.Root.Elements()

中放置条件

我试过了xDoc.Root.Elements().OrderBy(x => (string)x.Attribute("name")).Where(x => (string)x.Attribute("User").Value == loggedin_user);,但它没有给我输出......我得到Object reference not set to an instance of an object. 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您正在访问属性的属性(&#34;用户&#34;)(&#34;名称&#34;),然后您正在访问用户的属性值。其中一个是null。

尝试构造一个查询,该查询查找缺少属性名称的元素,或者返回缺少User属性的元素。我想你会找到有罪的元素。

然后重新格式化您的查询以保护,例如通过在访问其属性之前添加Where(at =&gt; at!= null)。

答案 1 :(得分:0)

如果没有结果,请使用FirstOrDefault获取null:

XElement value =  xdoc.Descendants()
    .Elements("Group")
    .Where(i => i.Attribute("name").Value == "Front0")
    .OrderBy(i => i.Attribute("name").Value)
    .FirstOrDefault();