Linq to Xml: Elemente ausgewählt werden, wenn ein Attribut-Wert entspricht einem Knotenwert in einem IEnumerable<XElement - >
Erstelle ich ein IEnumerable-Objekt, das enthält nur die Knoten, ich möchte aus einer xml-Datei:
IEnumerable<XElement> rosters = XDocument.Load("roster.xml")
.Elements("rosterlist")
.Elements("roster")
.Where(w => w.Element("division")
.Value
.Equals("SUPER AWESOME DIVISION"));
Es ist also eine Sammlung dieser:
<rosterlist>
<roster>
<userid>1</userid>
<name></name>
<etc></etc>
</roster>
<roster>
<userid>2</userid>
<name></name>
<etc></etc>
</roster>
</rosterlist>
Ich soll die nehmen Sie nur die Benutzer, wo die userid
- Attribut ist auch ein userid
Knoten innerhalb der rosters
Sammlung.
IEnumerable<XElement> users = XDocument.Load("user.xml")
.Elements("userlist")
.Elements("user")
.Where(w => rosters.Elements("userid")
.Contains(w.Attribute("userid").Value));
Aber es gibt mir eine Fehlermeldung:
Den Typ der Argumente für die Methode 'System.Linq -.Enumerable.Contains(System.Sammlungen.Generisches.IEnumerable, TSource)' kann nicht abgeleitet werden aus der Nutzung. Versuchen Sie, den Typ der Argumente explizit.
Was ist falsch mit meinem Ansatz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem Problem, das ich sehe ist, dass in der letzten code-snippet,
...Elements("userid")
gibt eine Liste von XElement-Objekte, die nicht enthalten ein String zurückgegeben, indem der Value-Eigenschaft. Dieses sollte funktionieren...Jedoch würde ich dies tun, indem Sie mithilfe einer join-Abfrage.. Wählen Sie Benutzer einladen Dienstpläne auf userid
Es würde gehen, so etwas wie dieses
Ausgänge: