Aracılığıyla paylaş


Karmaşık filtreleme ile sorgu yazma (LINQ to XML)

Bazen karmaşık filtreler içeren XML sorgularına LINQ yazmak isteyebilirsiniz. Örneğin, belirli bir ada ve değere sahip bir alt öğeye sahip tüm öğeleri bulmanız gerekebilir. Bu makalede, karmaşık filtreleme ile sorgu yazma örneği verilmektedir.

Örnek: Yan tümcesinde Where iç içe bir sorguyla bulma

Bu örnek, aşağıdakilere sahip tüm PurchaseOrder öğelerin nasıl bulunduğunu gösterir:

  • Özniteliği "Shipping" değerine eşit olan Type bir alt Address öğe.
  • "NY" değerine eşit bir alt State öğe.

Yan tümcesinde Where iç içe yerleştirilmiş bir sorgu kullanır ve Any koleksiyonda herhangi bir öğe varsa işleç döndürür true . Örnekte XML belgesi Örnek XML dosyası kullanılmaktadır: Birden çok satın alma siparişi.

işleci hakkında Any daha fazla bilgi için bkz . Niceleyici İşlemleri (C#) ve Niceleyici İşlemleri (Visual Basic).

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"));
Dim root As XElement = XElement.Load("PurchaseOrders.xml")
Dim purchaseOrders As IEnumerable(Of XElement) = _
    From el In root.<PurchaseOrder> _
    Where _
        (From add In el.<Address> _
        Where _
             add.@Type = "Shipping" And _
             add.<State>.Value = "NY" _
        Select add) _
    .Any() _
    Select el
For Each el As XElement In purchaseOrders
    Console.WriteLine(el.@PurchaseOrderNumber)
Next

Bu örnek aşağıdaki çıkışı oluşturur:

99505

Örnek: Ad alanında bulunan XML'de bulma

Aşağıdaki örnek, yukarıdakiyle aynı sorguyu ancak ad alanında bulunan XML'yi gösterir. Daha fazla bilgi için bkz . Ad alanlarına genel bakış.

Bu örnekte XML belgesi Örnek XML dosyası kullanılmaktadır: Bir ad alanında birden çok satın alma siparişi.

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"));
Imports <xmlns:aw='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = XElement.Load("PurchaseOrdersInNamespace.xml")
        Dim purchaseOrders As IEnumerable(Of XElement) = _
            From el In root.<aw:PurchaseOrder> _
            Where _
                (From add In el.<aw:Address> _
                Where _
                     add.@aw:Type = "Shipping" And _
                     add.<aw:State>.Value = "NY" _
                Select add) _
            .Any() _
            Select el
        For Each el As XElement In purchaseOrders
            Console.WriteLine(el.@aw:PurchaseOrderNumber)
        Next
    End Sub
End Module

Bu örnek aşağıdaki çıkışı oluşturur:

99505

Ayrıca bkz.