6. 排序子句
LINQ可以按元素的一个或多个属性对元素进行排序。LINQ表达式的排序方式分为OrderBy、OrderByDescending、ThenBy、ThenByDescending这四种。
6.1 OrderBy和OrderByDescending
OrderBy用于按元素的值进行升序,语法:orderby 用于排序的元素的表达式
OrderByDescending用于按元素的值进行降序,
语法:orderby 用于排序的元素的表达式 descending
List<CustomerInfo> clist = new List<CustomerInfo>
{
new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
new CustomerInfo{ Name="欧阳锦鹏", Age=35, Tel ="1330708****"},
new CustomerInfo{ Name="上官无忌", Age=23, Tel ="1380524****"}
};
//按照年龄升序
var query = from customer in clist
orderby customer.Age
select customer;
Console.WriteLine("按年龄升序排列");
foreach (var ci in query)
{
Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
}
//按照年龄降序
var query2 = from customer in clist
orderby customer.Age descending
select customer;
Console.WriteLine("\n按年龄降序排列");
foreach (var ci in query2)
{
Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
}
//运行结果:
//
//按年龄升序排列
//姓名:上官飘飘 年龄:17 电话:1592842****
//姓名:上官无忌 年龄:23 电话:1380524****
//姓名:欧阳晓晓 年龄:35 电话:1330708****
//姓名:欧阳锦鹏 年龄:35 电话:1330708****
//
//按年龄降序排列
//姓名:欧阳晓晓 年龄:35 电话:1330708****
//姓名:欧阳锦鹏 年龄:35 电话:1330708****
//姓名:上官无忌 年龄:23 电话:1380524****
//姓名:上官飘飘 年龄:17 电话:1592842****
6.2 ThenBy和ThenByDescending
ThenBy和ThenByDescending用于对元素进行次要排序。基本语法:
orderby 用于排序的元素表达式,用于排序的元素表达式
orderby 用于排序的元素表达式,用于排序的元素表达式 descending
List<CustomerInfo> clist = new List<CustomerInfo> {
new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
new CustomerInfo{ Name="郭靖", Age=17, Tel ="1330708****"},
new CustomerInfo{ Name="黄蓉", Age=17, Tel ="1300524****"}
};
//按照年龄升序,再按名字的字数次要排序
var query = from customer in clist
orderby customer.Age,customer.Name.Length
select customer;
Console.WriteLine("按年龄排列,按名字字数进行次要排序");
foreach (var ci in query)
{
Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
}
//按照年龄升序,再按名字的字数降序次要排序
var query2 = from customer in clist
orderby customer.Age, customer.Name.Length descending
select customer;
Console.WriteLine("\n按年龄排列,按名字字数进行降序次要排序");
foreach (var ci in query2)
{
Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
}
//按照年龄升序,再按名字的字数降序要排序,在按电话号码进行第三条件排序
var query3 = from customer in clist
orderby customer.Age, customer.Name.Length,customer.Tel
select customer;
Console.WriteLine("\n按年龄,名字字数,电话号码排序");
foreach (var ci in query3)
{
Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
}
//按年龄排列,按名字字数进行次要排序
//姓名:郭靖 年龄:17 电话:1330708****
//姓名:黄蓉 年龄:17 电话:1300524****
//姓名:上官飘飘 年龄:17 电话:1592842****
//姓名:欧阳晓晓 年龄:35 电话:1330708****
//
//按年龄排列,按名字字数进行降序次要排序
//姓名:上官飘飘 年龄:17 电话:1592842****
//姓名:郭靖 年龄:17 电话:1330708****
//姓名:黄蓉 年龄:17 电话:1300524****
//姓名:欧阳晓晓 年龄:35 电话:1330708****
//
//按年龄,名字字数,电话号码排序
//姓名:黄蓉 年龄:17 电话:1300524****
//姓名:郭靖 年龄:17 电话:1330708****
//姓名:上官飘飘 年龄:17 电话:1592842****
//姓名:欧阳晓晓 年龄:35 电话:1330708****