Freigeben über


Vorgehensweise: Sortieren von Elementen in einer Sequenz (LINQ to SQL)

Verwenden Sie den OrderBy-Operator, um eine Sequenz nach einem oder mehreren Schlüsseln zu sortieren.

HinweisHinweis

LINQ to SQL ermöglicht die Sortierung mithilfe einfacher, primitiver Typen wie string, int usw.Sortierungen für komplexe, mehrwertige Klassen, z. B. anonyme Typen, werden nicht unterstützt.Außerdem werden keine byte-Datentypen unterstützt.

Beispiel

Das folgende Beispiel sortiert Employees nach dem Einstellungsdatum.

Dim hireQuery = _
    From emp In db.Employees _
    Select emp _
    Order By emp.HireDate

For Each empObj As Employee In hireQuery
    Console.WriteLine("EmpID = {0}, Date Hired = {1}", _
        empObj.EmployeeID, empObj.HireDate)
Next
IOrderedQueryable<Employee> hireQuery =
    from emp in db.Employees
    orderby emp.HireDate
    select emp;

foreach (Employee empObj in hireQuery)
{
    Console.WriteLine("EmpID = {0}, Date Hired = {1}",
        empObj.EmployeeID, empObj.HireDate);
}

Das folgende Beispiel verwendet where, um Orders, die nach London ausgeliefert wurden, nach Fracht zu sortieren.

Dim freightQuery = _
    From ord In db.Orders _
    Where ord.ShipCity = "London" _
    Select ord _
    Order By ord.Freight

For Each ordObj In freightQuery
    Console.WriteLine("Order ID = {0}, Freight = {1}", _
        ordObj.OrderID, ordObj.Freight)
Next
IOrderedQueryable<Order> freightQuery =
    from ord in db.Orders
    where ord.ShipCity == "London"
    orderby ord.Freight
    select ord;

foreach (Order ordObj in freightQuery)
{
    Console.WriteLine("Order ID = {0}, Freight = {1}",
        ordObj.OrderID, ordObj.Freight);
}

Im folgenden Beispiel wird Products absteigend nach Einzelpreis sortiert.

Dim priceQuery = _
    From prod In db.Products _
    Select prod _
    Order By prod.UnitPrice Descending

For Each prodObj In priceQuery
    Console.WriteLine("Product ID = {0}, Unit Price = {1}", _
       prodObj.ProductID, prodObj.UnitPrice)
Next
IOrderedQueryable<Product> priceQuery =
    from prod in db.Products
    orderby prod.UnitPrice descending
    select prod;

foreach (Product prodObj in priceQuery)
{
    Console.WriteLine("Product ID = {0}, Unit Price = {1}",
        prodObj.ProductID, prodObj.UnitPrice);
}

Im folgenden Beispiel wird ein zusammengesetztes OrderBy verwendet, um Customers nach Ort und dann nach Kontaktnamen zu sortieren.

Dim custQuery = _
    From cust In db.Customers _
    Select cust _
    Order By cust.City, cust.ContactName

For Each custObj In custQuery
    Console.WriteLine("City = {0}, Name = {1}", custObj.City, _
        custObj.ContactName)
Next
            IOrderedQueryable<Customer> custQuery =
                from cust in db.Customers
                orderby cust.City, cust.ContactName
                select cust;

            foreach (Customer custObj in custQuery)
            {
                Console.WriteLine("City = {0}, Name = {1}", custObj.City,
                    custObj.ContactName);
            }

Im folgenden Beispiel werden Bestellungen von EmployeeID 1 nach Lieferland und dann absteigend nach Fracht sortiert.

Dim ordQuery = _
    From ord In db.Orders _
    Where CInt(ord.EmployeeID.Value) = 1 _
    Select ord _
    Order By ord.ShipCountry, ord.Freight Descending

For Each ordObj In ordQuery
    Console.WriteLine("Country = {0}, Freight = {1}", _
        ordObj.ShipCountry, ordObj.Freight)
Next
IOrderedQueryable<Order> ordQuery =
    from ord in db.Orders
    where ord.EmployeeID == 1
    orderby ord.ShipCountry, ord.Freight descending
    select ord;

foreach (Order ordObj in ordQuery)
{
    Console.WriteLine("Country = {0}, Freight = {1}",
        ordObj.ShipCountry, ordObj.Freight);
}

Das folgende Beispiel kombiniert die Operatoren OrderBy, Max und GroupBy, um jene Products zu ermitteln, die in den einzelnen Kategorien die höchsten Einzelpreise aufweisen. Anschließend wird die Gruppe nach Kategorie-ID sortiert.

Dim highPriceQuery = From prod In db.Products _
    Group prod By prod.CategoryID Into grouping = Group _
    Order By CategoryID _
    Select CategoryID, _
    MostExpensiveProducts = _
        From prod2 In grouping _
        Where prod2.UnitPrice = _
        grouping.Max(Function(p3) p3.UnitPrice)

For Each prodObj In highPriceQuery
    Console.WriteLine(prodObj.CategoryID)
    For Each listing In prodObj.MostExpensiveProducts
        Console.WriteLine(listing.ProductName)
    Next
Next
var highPriceQuery =
    from prod in db.Products
    group prod by prod.CategoryID into grouping
    orderby grouping.Key
    select new
    {
        grouping.Key,
        MostExpensiveProducts =
            from prod2 in grouping
            where prod2.UnitPrice == grouping.Max(p3 => p3.UnitPrice)
            select prod2
    };

foreach (var prodObj in highPriceQuery)
{
    Console.WriteLine(prodObj.Key);
    foreach (var listing in prodObj.MostExpensiveProducts)
    {
        Console.WriteLine(listing.ProductName);
    }
}

Wenn Sie die vorherige Abfrage mit der Beispieldatenbank Northwind ausführen, sehen die Ergebnisse wie folgt aus:

1

Côte de Blaye

2

Vegie-spread

3

Sir Rodney's Marmalade

4

Raclette Courdavault

5

Gnocchi di nonna Alice

6

Thüringer Rostbratwurst

7

Manjimup Dried Apples

8

Carnarvon Tigers

Siehe auch

Konzepte

Herunterladen von Beispieldatenbanken (LINQ to SQL)

Weitere Ressourcen

Beispiele für Abfragen (LINQ to SQL)