Elementen op meerdere sleutels sorteren (LINQ naar XML)
In dit artikel wordt beschreven hoe u kunt sorteren op meerdere sleutels in C# en Visual Basic.
Voorbeeld: XML-elementen sorteren op meerdere sleutels
In dit voorbeeld worden twee sleutels gesorteerd: postcode verzenden (primair) en besteldatum. Het maakt gebruik van XML-voorbeeld-XML-bestand met xml-documenten : klanten en orders.
XElement co = XElement.Load("CustomersOrders.xml");
var sortedElements =
from c in co.Element("Orders").Elements("Order")
orderby (string)c.Element("ShipInfo").Element("ShipPostalCode"),
(DateTime)c.Element("OrderDate")
select new {
CustomerID = (string)c.Element("CustomerID"),
EmployeeID = (string)c.Element("EmployeeID"),
ShipPostalCode = (string)c.Element("ShipInfo").Element("ShipPostalCode"),
OrderDate = (DateTime)c.Element("OrderDate")
};
foreach (var r in sortedElements)
Console.WriteLine("CustomerID:{0} EmployeeID:{1} ShipPostalCode:{2} OrderDate:{3:d}",
r.CustomerID, r.EmployeeID, r.ShipPostalCode, r.OrderDate);
Dim co As XElement = XElement.Load("CustomersOrders.xml")
Dim result = _
From c In co.<Orders>.<Order> _
Order By c.<ShipInfo>.<ShipPostalCode>.Value, Convert.ToDateTime(c.<OrderDate>.Value) _
Select New With { _
.CustomerID = c.<CustomerID>.Value, _
.EmployeeID = c.<EmployeeID>.Value, _
.ShipPostalCode = c.<ShipInfo>.<ShipPostalCode>.Value, _
.OrderDate = Convert.ToDateTime(c.<OrderDate>.Value) _
}
For Each r In result
Console.WriteLine("CustomerID:{0} EmployeeID:{1} ShipPostalCode:{2} OrderDate:{3:d}", _
r.CustomerID, r.EmployeeID, r.ShipPostalCode, r.OrderDate)
Next
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
CustomerID:LETSS EmployeeID:1 ShipPostalCode:94117 OrderDate:6/25/1997
CustomerID:LETSS EmployeeID:8 ShipPostalCode:94117 OrderDate:10/27/1997
CustomerID:LETSS EmployeeID:6 ShipPostalCode:94117 OrderDate:11/10/1997
CustomerID:LETSS EmployeeID:4 ShipPostalCode:94117 OrderDate:2/12/1998
CustomerID:GREAL EmployeeID:6 ShipPostalCode:97403 OrderDate:5/6/1997
CustomerID:GREAL EmployeeID:8 ShipPostalCode:97403 OrderDate:7/4/1997
CustomerID:GREAL EmployeeID:1 ShipPostalCode:97403 OrderDate:7/31/1997
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:7/31/1997
CustomerID:GREAL EmployeeID:6 ShipPostalCode:97403 OrderDate:9/4/1997
CustomerID:GREAL EmployeeID:3 ShipPostalCode:97403 OrderDate:9/25/1997
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:1/6/1998
CustomerID:GREAL EmployeeID:3 ShipPostalCode:97403 OrderDate:3/9/1998
CustomerID:GREAL EmployeeID:3 ShipPostalCode:97403 OrderDate:4/7/1998
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:4/22/1998
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:4/30/1998
CustomerID:HUNGC EmployeeID:3 ShipPostalCode:97827 OrderDate:12/6/1996
CustomerID:HUNGC EmployeeID:1 ShipPostalCode:97827 OrderDate:12/25/1996
CustomerID:HUNGC EmployeeID:3 ShipPostalCode:97827 OrderDate:1/15/1997
CustomerID:HUNGC EmployeeID:4 ShipPostalCode:97827 OrderDate:7/16/1997
CustomerID:HUNGC EmployeeID:8 ShipPostalCode:97827 OrderDate:9/8/1997
CustomerID:LAZYK EmployeeID:1 ShipPostalCode:99362 OrderDate:3/21/1997
CustomerID:LAZYK EmployeeID:8 ShipPostalCode:99362 OrderDate:5/22/1997
Voorbeeld: XML sorteren die zich in een naamruimte bevindt
In dit voorbeeld wordt hetzelfde gesorteerd als de eerste, maar voor XML die zich in een naamruimte bevindt. Het maakt gebruik van XML-voorbeeld-XML-bestand met xml-documenten : klanten en orders in een naamruimte.
Zie het overzicht van naamruimten voor meer informatie.
XElement co = XElement.Load("CustomersOrdersInNamespace.xml");
XNamespace aw = "http://www.adventure-works.com";
var sortedElements =
from c in co.Element(aw + "Orders").Elements(aw + "Order")
orderby (string)c.Element(aw + "ShipInfo").Element(aw + "ShipPostalCode"),
(DateTime)c.Element(aw + "OrderDate")
select new
{
CustomerID = (string)c.Element(aw + "CustomerID"),
EmployeeID = (string)c.Element(aw + "EmployeeID"),
ShipPostalCode = (string)c.Element(aw + "ShipInfo").Element(aw + "ShipPostalCode"),
OrderDate = (DateTime)c.Element(aw + "OrderDate")
};
foreach (var r in sortedElements)
Console.WriteLine("CustomerID:{0} EmployeeID:{1} ShipPostalCode:{2} OrderDate:{3:d}",
r.CustomerID, r.EmployeeID, r.ShipPostalCode, r.OrderDate);
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim co As XElement = XElement.Load("CustomersOrdersInNamespace.xml")
Dim result = _
From c In co.<Orders>.<Order> _
Order By c.<ShipInfo>.<ShipPostalCode>.Value, Convert.ToDateTime(c.<OrderDate>.Value) _
Select New With { _
.CustomerID = c.<CustomerID>.Value, _
.EmployeeID = c.<EmployeeID>.Value, _
.ShipPostalCode = c.<ShipInfo>.<ShipPostalCode>.Value, _
.OrderDate = Convert.ToDateTime(c.<OrderDate>.Value) _
}
For Each r In result
Console.WriteLine("CustomerID:{0} EmployeeID:{1} ShipPostalCode:{2} OrderDate:{3:d}", _
r.CustomerID, r.EmployeeID, r.ShipPostalCode, r.OrderDate)
Next
End Sub
End Module
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
CustomerID:LETSS EmployeeID:1 ShipPostalCode:94117 OrderDate:6/25/1997
CustomerID:LETSS EmployeeID:8 ShipPostalCode:94117 OrderDate:10/27/1997
CustomerID:LETSS EmployeeID:6 ShipPostalCode:94117 OrderDate:11/10/1997
CustomerID:LETSS EmployeeID:4 ShipPostalCode:94117 OrderDate:2/12/1998
CustomerID:GREAL EmployeeID:6 ShipPostalCode:97403 OrderDate:5/6/1997
CustomerID:GREAL EmployeeID:8 ShipPostalCode:97403 OrderDate:7/4/1997
CustomerID:GREAL EmployeeID:1 ShipPostalCode:97403 OrderDate:7/31/1997
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:7/31/1997
CustomerID:GREAL EmployeeID:6 ShipPostalCode:97403 OrderDate:9/4/1997
CustomerID:GREAL EmployeeID:3 ShipPostalCode:97403 OrderDate:9/25/1997
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:1/6/1998
CustomerID:GREAL EmployeeID:3 ShipPostalCode:97403 OrderDate:3/9/1998
CustomerID:GREAL EmployeeID:3 ShipPostalCode:97403 OrderDate:4/7/1998
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:4/22/1998
CustomerID:GREAL EmployeeID:4 ShipPostalCode:97403 OrderDate:4/30/1998
CustomerID:HUNGC EmployeeID:3 ShipPostalCode:97827 OrderDate:12/6/1996
CustomerID:HUNGC EmployeeID:1 ShipPostalCode:97827 OrderDate:12/25/1996
CustomerID:HUNGC EmployeeID:3 ShipPostalCode:97827 OrderDate:1/15/1997
CustomerID:HUNGC EmployeeID:4 ShipPostalCode:97827 OrderDate:7/16/1997
CustomerID:HUNGC EmployeeID:8 ShipPostalCode:97827 OrderDate:9/8/1997
CustomerID:LAZYK EmployeeID:1 ShipPostalCode:99362 OrderDate:3/21/1997
CustomerID:LAZYK EmployeeID:8 ShipPostalCode:99362 OrderDate:5/22/1997
Zie ook
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort: Gedurende 2024 worden GitHub Issues uitgefaseerd als het feedbackmechanisme voor inhoud. Dit wordt vervangen door een nieuw feedbacksysteem. Ga voor meer informatie naar:Feedback verzenden en bekijken voor