Where条件在XDocument linq查询
本文关键字:linq 查询 XDocument 条件 Where | 更新日期: 2023-09-27 18:05:34
我有一个代码:
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>
我想把where条件放在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.
任何建议吗?
您正在访问Attribute("name")的Attribute("User"),那么您正在访问User的property Value。其中一个是null
尝试构造一个查询,查找缺少属性名的元素,或者返回缺少User属性的元素。我想你会发现有罪的因素。
然后重新格式化您的查询以保护,例如,在访问其属性之前添加Where(at => at != null)
当没有结果时使用FirstOrDefault
获取null:
XElement value = xdoc.Descendants()
.Elements("Group")
.Where(i => i.Attribute("name").Value == "Front0")
.OrderBy(i => i.Attribute("name").Value)
.FirstOrDefault();