对 join 子句的结果进行排序
此示例演示如何对联接运算的结果进行排序。 请注意,排序在联接之后执行。 虽然可以在联接之前将 orderby
子句用于一个或多个源序列,不过通常不建议这样做。 某些 LINQ 提供程序可能不会在联接之后保留该排序。
备注
本主题中的示例使用以下数据类:
record Product(string Name, int CategoryID);
record Category(string Name, int ID);
示例
此查询创建一个分组联接,然后基于类别元素(仍处于范围中)对组进行排序。 在匿名类型初始值设定项内,一个子查询对来自产品序列的所有匹配元素进行排序。
List<Category> categories = new()
{
new(Name: "Beverages", ID: 001),
new("Condiments", 002),
new("Vegetables", 003),
new("Grains", 004),
new("Fruit", 005)
};
List<Product> products = new()
{
new(Name: "Cola", CategoryID: 001),
new("Tea", 001),
new("Mustard", 002),
new("Pickles", 002),
new("Carrots", 003),
new("Bok Choy", 003),
new("Peaches", 005),
new("Melons", 005),
};
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($" {prodItem.Name,-10} {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
*/