好的,Users元素没有GUID属性。有两个建议的选项:
- 查看
XDocument.Root.Elements("User")
- 使用
Descendants("User")
来查找所有 User 元素。
我暂时会选择前者。这给了我们:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
现在,我们仍然可以进一步整理这个代码。首先,让我们将其从string
转换为Guid
类型:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);
然而在这里使用查询表达式的理由不多...你只是应用了一个单一的谓词。让我们直接使用Where
方法:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
当然如何进行布局是由您自行决定的 :) 对于较长的行,您可以在较长的第一行下对齐所有内容:
IEnumerable<XElement> users = XMLDoc.Root
. etc
那么,最后一个问题 - 如果User元素没有GUID属性怎么办?目前,这段代码会抛出异常。这可能正是您想要的 - 也可能不是。如果不是,您可以通过将其转换为Nullable<Guid>
,也就是Guid?
来忽略这些东西:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);