LINQ排序操作符:OrderBy和OrderByDescending
在C#&.NET的应用程序编程开发中,数据集合中的对象是以任意的顺序排列的,我们可能希望按照特定的顺序对其进行排序。在.NET的LINQ中,排序操作符允许我们按升序或降序排列集合中的元素,LINQ包括以下排序操作符。
排序操作符 | 描述 |
---|---|
OrderBy | 根据指定字段按升序或降序对集合中的元素进行排序。 |
OrderByDescending | 基于指定字段按降序对集合进行排序。仅在方法语法中有效。 |
ThenBy | 仅在方法语法中有效。用于按升序进行二级排序。 |
ThenByDescending | 仅在方法语法中有效。用于按降序排序的第二级排序。 |
Reverse | 仅在方法语法中有效。对集合进行反向排序。 |
OrderBy和OrderByDescending示例
在LINQ的查询语法中,OrderBy
按升序或降序对集合的值进行排序。默认情况下,它按升序对集合进行排序,因为ascending
关键字在这里是可选的。使用descending
关键字对集合进行降序排序。
在LINQ的方法语法中,OrderBy
则只能按升序对集合的值进行排序,而OrderByDescending
则按降序排序,并且OrderByDescending
只适用于方法语法中。
以下是LINQ查询语法的排序示例:
public class MyProgram
{
static void Main(string[] args)
{
var orders = FakeData.Orders;
// 1.升序(ascending)
Console.WriteLine("**************升序**************");
var result = from o in orders
orderby o.Price ascending
select o;
foreach (var order in result)
{
Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
}
// 1.降序(descending)
Console.WriteLine("**************降序**************");
var resultByDescending = from o in orders
orderby o.Price descending
select o;
foreach (var order in resultByDescending)
{
Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
}
Console.ReadKey();
}
}
运行结果:
**************升序**************
3,Chris,1999
5,Jo,2569
2,James,2699
1,Rector,3699
4,Steven,5699
6,Rector,5699
**************降序**************
4,Steven,5699
6,Rector,5699
1,Rector,3699
2,James,2699
5,Jo,2569
3,Chris,1999
以下是LINQ方法语法的排序示例:
public class MyProgram
{
static void Main(string[] args)
{
var orders = FakeData.Orders;
// LINQ排序--方法语法
// 1.升序(ascending)
Console.WriteLine("**************升序**************");
var result = orders.OrderBy(x => x.Price);
foreach (var order in result)
{
Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
}
// 1.降序(descending)
Console.WriteLine("**************降序**************");
var resultByDescending = orders.OrderByDescending(x => x.Price);
foreach (var order in resultByDescending)
{
Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
}
Console.ReadKey();
}
}
运行结果同上。
注:
OrderByDescending()
方法只适用于LINQ方法语法。
多字段排序
LINQ还可对集合进行多字段排序,比如:要对订单集合的价格和ID进行不同顺序的排序。
以下是查询语法的示例代码:
public class MyProgram
{
static void Main(string[] args)
{
var orders = FakeData.Orders;
// LINQ排序--查询语法
// 1.先按来源升序,再按价格升序
Console.WriteLine("**************先按来源升序,再按价格升序**************");
var result1 = from o in orders
orderby o.Source, o.Price
select o;
foreach (var order in result1)
{
Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
}
// 2.先按来源升序,再按价格降序
Console.WriteLine("**************先按来源升序,再按价格降序**************");
var result2 = from o in orders
orderby o.Source, o.Price descending
select o;
foreach (var order in result2)
{
Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
}
Console.ReadKey();
}
}
运行结果如下:
**************先按来源升序,再按价格升序**************
2,James,2699
1,Rector,3699
4,Steven,5699
6,Rector,5699
3,Chris,1999
5,Jo,2569
**************先按来源升序,再按价格降序**************
4,Steven,5699
6,Rector,5699
1,Rector,3699
2,James,2699
5,Jo,2569
3,Chris,1999
LINQ查询语法的多字段排序是在
orderby
操作符后以逗号分隔的多个字段,同时可指定排序方向。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册