Bagikan melalui


Cara menulis kueri dengan pemfilteran kompleks (LINQ ke XML)

Terkadang Anda ingin menulis kueri LINQ ke XML dengan filter kompleks. Misalnya, Anda mungkin harus menemukan semua elemen yang memiliki elemen turunan dengan nama dan nilai tertentu. Artikel ini memberikan contoh penulisan kueri dengan pemfilteran yang kompleks.

Contoh: Temukan dengan kueri berlapis dalam klausul Where

Contoh ini menunjukkan cara menemukan semua elemen PurchaseOrder yang memiliki:

  • Elemen turunan Address yang atribut Type nya sama dengan "Pengiriman".
  • Elemen turunan State yang sama dengan "NY".

Ini menggunakan kueri berlapis dalam Where klausul Any, dan operator true mengembalikan jika koleksi memiliki elemen apa pun di dalamnya. Contohnya menggunakan file XML Sampel dokumen XML: Beberapa pesanan pembelian.

Untuk informasi selengkapnya tentang Any operator, lihat Operasi Quantifier (C#) dan Operasi Quantifier (Visual Basic) (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

Contoh ini menghasilkan output berikut:

99505

Contoh: Temukan di XML yang ada di namespace

Contoh berikut menunjukkan kueri yang sama seperti di atas, tetapi untuk XML yang ada di namespace. Untuk informasi lebih lanjut, lihat Ringkasan kumpulan nama XML.

Contoh ini menggunakan File XML sampel dokumen XML: Beberapa pesanan pembelian di 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"));
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

Contoh ini menghasilkan output berikut:

99505

Lihat juga