Nun, die Benutzer Elemente haben keine GUID-Attribute. Zwei vorgeschlagene Optionen:
- Blick auf
XDocument.Root.Elements("User")
- Utilice
Descendants("User")
zu finden alle Benutzer-Elemente.
Ich bleibe vorerst bei der ersten Variante. Das gibt uns:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
Jetzt können wir das noch weiter aufräumen. Erstens, lassen Sie uns nach Guid
代わりに string
:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);
Es gibt jedoch nicht viel Grund, hier einen Abfrageausdruck zu verwenden... alles, was Sie anwenden, ist ein einzelnes Prädikat. Verwenden wir einfach die Where
Methode direkt:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
Wie du es anlegst, ist natürlich dir überlassen :) Bei einer längeren Zeile können Sie wahrscheinlich alles unter einer längeren ersten Zeile anordnen:
IEnumerable<XElement> users = XMLDoc.Root
. etc
Und was ist, wenn das Element User kein GUID-Attribut hat? Derzeit wird dieser Code eine Ausnahme auslösen. Das kann genau das sein, was Sie wollen - oder auch nicht. Wenn nicht, können Sie solche Dinge ignorieren, indem Sie auf Nullable<Guid>
alias Guid?
stattdessen:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);