Auswählen eines bestimmten Knotens mit LINQ-to-XML

Ich kann den ersten Kundenknoten auswählen und seinen Firmennamen mit dem untenstehenden Code ändern.

Aber wie wähle ich Kundenknoten aus, wo ID=2?

    XDocument xmldoc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XComment("These are all the customers transfered from the database."),
        new XElement("Customers",
            new XElement("Customer",
                new XAttribute("ID", 1),
                new XElement("FullName", "Jim Tester"),
                new XElement("Title", "Developer"),
                new XElement("Company", "Apple Inc.")
                ),
            new XElement("Customer",
                new XAttribute("ID", 2),
                new XElement("FullName", "John Testly"),
                new XElement("Title", "Tester"),
                new XElement("Company", "Google")
                )
            )
        );

    XElement elementToChange = xmldoc.Element("Customers").Element("Customer").Element("Company");
    elementToChange.ReplaceWith(new XElement("Company", "new company value..."));

ANSWER:

Danke Jungs, für die Aufzeichnung, hier ist die genaue Syntax, um das Unternehmenselement im Customer-with-id-2-Element zu suchen und dann nur den Wert des Unternehmenselements zu ändern:

XElement elementToChange = xmldoc.Element("Customers")
    .Elements("Customer")
    .Single(x => (int)x.Attribute("ID") == 2)
    .Element("Company");
elementToChange.ReplaceWith(
    new XElement("Company", "new company value...")
    );

ANSWER WITH METHOD SYNTAX:

Just hat es auch in der Methodensyntax herausgefunden:

XElement elementToChange = (from c in xmldoc.Element("Customers")
                                .Elements("Customer")
                            where (int)c.Attribute("ID") == 3
                            select c).Single().Element("Company");

Antwort auf "Auswählen eines bestimmten Knotens mit LINQ-to-XML " 2 von antworten

Angenommen, die ID ist eindeutig:

var result = xmldoc.Element("Customers")
                   .Elements("Customer")
                   .Single(x => (int?)x.Attribute("ID") == 2);

Sie könnten auch First, , FirstOrDefault, , SingleOrDefault or oder Where, instead of anstelle von Single for different circumstances. für verschiedene Umstände verwenden.

Ich würde so etwas wie verwenden:

dim customer = (from c in xmldoc...<Customer> 
                where c.<ID>.Value=22 
                select c).SingleOrDefault 

Bearbeiten:

verpasste das c-Tag, sorry...... das Beispiel befindet sich in VB.NET