Vorgehensweise: Schreiben von Abfragen mit komplexer Filterung (C#)How to: Write Queries with Complex Filtering (C#)

Es kann vorkommen, dass Sie LINQ to XML-Abfragen mit komplexen Filtern schreiben möchten.Sometimes you want to write LINQ to XML queries with complex filters. Vielleicht möchten Sie z. B. auf diese Weise nach allen Elementen suchen, die ein untergeordnetes Element mit einem bestimmten Namen und einem bestimmten Wert besitzen.For example, you might have to find all elements that have a child element with a particular name and value. In diesem Thema finden Sie ein Beispiel für das Schreiben von Fragen mit komplexer Filterung.This topic gives an example of writing a query with complex filtering.

BeispielExample

Dieses Beispiel zeigt, wie Sie nach allen PurchaseOrder-Elementen suchen können, die ein untergeordnetes Address-Element mit einem Type-Attribut "Shipping" und einem untergeordneten State-Element "NY" besitzen.This example shows how to find all PurchaseOrder elements that have a child Address element that has a Type attribute equal to "Shipping" and a child State element equal to "NY". Das Beispiel verwendet eine geschachtelte Abfrage in der Where-Klausel, und der Any-Operator gibt true zurück, sofern die Auflistung überhaupt Elemente enthält.It uses a nested query in the Where clause, and the Any operator returns true if the collection has any elements in it. Weitere Informationen zu methodenbasierter Abfragesyntax finden Sie unter Abfragesyntax und Methodensyntax in LINQ.For information about using method-based query syntax, see Query Syntax and Method Syntax in LINQ.

Dieses Beispiel verwendet das folgende XML-Dokument: Beispiel-XML-Datei: mehrfache Bestellung (LINQ to XML).This example uses the following XML document: Sample XML File: Multiple Purchase Orders (LINQ to XML).

Weitere Informationen zum Any-Operator finden Sie unter Quantifier Operations (C#) (Quantifizierervorgänge (C#)).For more information about the Any operator, see Quantifier Operations (C#).

XElement root = XElement.Load("PurchaseOrders.xml");  
IEnumerable<XElement> purchaseOrders =  
    from el in root.Elements("PurchaseOrder")  
    where   
        (from add in el.Elements("Address")  
        where  
            (string)add.Attribute("Type") == "Shipping" &&  
            (string)add.Element("State") == "NY"  
        select add)  
        .Any()  
    select el;  
foreach (XElement el in purchaseOrders)  
    Console.WriteLine((string)el.Attribute("PurchaseOrderNumber"));  

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

99505  

BeispielExample

Im folgenden Beispiel wird dieselbe Abfrage für XML in einem Namespace gezeigt.The following example shows the same query for XML that is in a namespace. Weitere Informationen finden Sie unter Working with XML Namespaces (C#) (Arbeiten mit XML-Namespaces (C#)).For more information, see Working with XML Namespaces (C#).

Dieses Beispiel verwendet das folgende XML-Dokument: Beispiel-XML-Datei: mehrfache Bestellung in einem Namespace.This example uses the following XML document: Sample XML File: Multiple Purchase Orders in a Namespace.

XElement root = XElement.Load("PurchaseOrdersInNamespace.xml");  
XNamespace aw = "http://www.adventure-works.com";  
IEnumerable<XElement> purchaseOrders =  
    from el in root.Elements(aw + "PurchaseOrder")  
    where  
        (from add in el.Elements(aw + "Address")  
         where  
             (string)add.Attribute(aw + "Type") == "Shipping" &&  
             (string)add.Element(aw + "State") == "NY"  
         select add)  
        .Any()  
    select el;  
foreach (XElement el in purchaseOrders)  
    Console.WriteLine((string)el.Attribute(aw + "PurchaseOrderNumber"));  

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

99505  

Siehe auchSee Also

Attribute
Elements
Basic Queries (LINQ to XML) (C#) (Standardabfragen (LINQ to XML) (C#))Basic Queries (LINQ to XML) (C#)
Projection Operations (C#) (Projektionsvorgänge (C#))Projection Operations (C#)
Quantifizierer-Vorgänge (C#)Quantifier Operations (C#)