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)