Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Néha összetett szűrőkkel szeretne LINQ-t írni XML-lekérdezésekbe. Előfordulhat például, hogy meg kell találnia az összes olyan elemet, amelynek gyermekeleme egy adott névvel és értékkel rendelkezik. Ez a cikk egy összetett szűréssel rendelkező lekérdezés írására ad példát.
Példa: Keresés beágyazott lekérdezéssel a Where záradékban
Ez a példa bemutatja, hogyan keresheti meg az összes PurchaseOrder olyan elemet, amely az alábbiakat tartalmazza:
- Egy gyermekelem
Address, amelynekTypeattribútuma "Szállítás" értékkel egyenlő. - Egy "NY" értékű gyermekelem
State.
Beágyazott lekérdezést használ a Where záradékban, és az Any operátor visszaadja true , ha a gyűjtemény tartalmaz elemeket. A példa XML-dokumentum minta XML-fájlját használja: Több beszerzési rendelés.
Az operátorról további információt a Any Quantifier Operations (C#) és a Quantifier Operations (Visual Basic) című témakörben talál.
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
Ez a példa a következő kimenetet hozza létre:
99505
Példa: Keresés névtérben lévő XML-ben
Az alábbi példa ugyanazt a lekérdezést mutatja be, mint a fenti, de egy névtérben lévő XML-fájl esetében. További információ: Névterek áttekintése.
Ez a példa XML-minta XML-fájlt használ: Több beszerzési rendelés egy névtérben.
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
Ez a példa a következő kimenetet hozza létre:
99505