Gewusst wie: Sortieren der Ergebnisse einer Join-Klausel (C#-Programmierhandbuch)

Aktualisiert: November 2007

In diesem Beispiel wird gezeigt, wie die Ergebnisse einer Verknüpfungsoperation sortiert werden. Beachten Sie, dass die Sortierung nach der Verknüpfung ausgeführt wird. Zwar ist es möglich, eine orderby-Klausel mit einer oder mehreren Quellsequenzen vor der Verknüpfung zu verwenden, diese Vorgehensweise wird aber nicht empfohlen. Diese Sortierung wird nach der Verknüpfung möglicherweise nicht bei allen LINQ-Anbietern beibehalten.

Beispiel

Diese Abfrage erstellt eine Gruppenverknüpfung und sortiert die Gruppen dann auf Basis des Kategorieelements, das sich noch im Gültigkeitsbereich befindet. Im anonymen Typinitialisierer werden alle übereinstimmenden Elemente aus der Produktsequenz durch eine Unterabfrage sortiert.

class HowToOrderJoins
{
    #region Data
    class Product
    {
        public string Name { get; set; }
        public int CategoryID { get; set; }
    }

    class Category
    {
        public string Name { get; set; }
        public int ID { get; set; }
    }

    // Specify the first data source.
    List<Category> categories = new List<Category>()
    { 
        new Category(){Name="Beverages", ID=001},
        new Category(){ Name="Condiments", ID=002},
        new Category(){ Name="Vegetables", ID=003},
        new Category() {  Name="Grains", ID=004},
        new Category() {  Name="Fruit", ID=005}            
    };

    // Specify the second data source.
    List<Product> products = new List<Product>()
   {
      new Product{Name="Cola",  CategoryID=001},
      new Product{Name="Tea",  CategoryID=001},
      new Product{Name="Mustard", CategoryID=002},
      new Product{Name="Pickles", CategoryID=002},
      new Product{Name="Carrots", CategoryID=003},
      new Product{Name="Bok Choy", CategoryID=003},
      new Product{Name="Peaches", CategoryID=005},
      new Product{Name="Melons", CategoryID=005},
    };
    #endregion
    static void Main()
    {
        HowToOrderJoins app = new HowToOrderJoins();
        app.OrderJoin1();

        // Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();

    }

    void OrderJoin1()
    {
        var groupJoinQuery2 =
            from category in categories
            join prod in products on category.ID equals prod.CategoryID into prodGroup
            orderby category.Name
            select new
            {
                Category = category.Name,
                Products = from prod2 in prodGroup
                           orderby prod2.Name
                           select prod2
            };

        foreach (var productGroup in groupJoinQuery2)
        {
            Console.WriteLine(productGroup.Category);
            foreach (var prodItem in productGroup.Products)
            {
                Console.WriteLine("  {0,-10} {1}", prodItem.Name, prodItem.CategoryID);
            }
        }
    }
    /* Output:
        Beverages
          Cola       1
          Tea        1
        Condiments
          Mustard    2
          Pickles    2
        Fruit
          Melons     5
          Peaches    5
        Grains
        Vegetables
          Bok Choy   3
          Carrots    3
     */
}

Kompilieren des Codes

  • Erstellen Sie ein Visual Studio-Projekt für .NET Framework, Version 3.5. Standardmäßig hat das Projekt einen Verweis auf System.Core.dll und eine using-Direktive für den System.Linq-Namespace.

  • Kopieren Sie den Code in Ihr Projekt.

  • Drücken Sie F5, um das Programm zu kompilieren und auszuführen.

  • Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen.

Siehe auch

Konzepte

LINQ-Abfrageausdrücke (C#-Programmierhandbuch)

Verknüpfungsvorgänge

Referenz

orderby-Klausel (C#-Referenz)

join-Klausel (C#-Referenz)