LINQ查询表达式---------orderby子句
LINQ可以按元素的一个或多个属性对元素进行排序。
class Program { public class PerInfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } static void Main(string[] args) { List<PerInfo> perInfos = new List<PerInfo> { new PerInfo{Id = 1, Name = "小日", Age = 15}, new PerInfo{Id = 2, Name = "小月", Age = 17}, new PerInfo{Id = 3, Name = "张三日", Age = 17}, new PerInfo{Id = 4, Name = "李四月", Age = 23} }; //1、对Id大于1的元素按升序排列 var query1 = from q in perInfos where q.Id > 1 orderby q.Id ascending select q; Console.WriteLine("按Id升序排列:"); foreach (var item in query1) { Console.WriteLine(" {0} {1}", item.Id, item.Name); } //2、对Id大于1的元素按降序排列 var query2 = from q in perInfos where q.Id > 1 orderby q.Id descending select q; Console.WriteLine("\n按Id降序排列:"); foreach (var item in query2) { Console.WriteLine(" {0} {1}", item.Id, item.Name); } //3、按年龄大小排列,按名字字数进行次要排序 var query3 = from q in perInfos orderby q.Age ascending, q.Name.Length descending select q; Console.WriteLine("\n按Age升序,按名字字数进行次要降序:"); foreach (var item in query3) { Console.WriteLine(" {0} {1} {2}", item.Id, item.Name, item.Age); } //4、分组按组建排序 var query4 = from q in perInfos group q by q.Age into Newpers orderby Newpers.Key descending select Newpers; Console.WriteLine("\n分组排序:"); foreach (var item in query4) { Console.WriteLine("分组-排序键:{0}", item.Key); foreach (var v in item) { Console.WriteLine(" {0} {1} {2}", v.Id, v.Name, v.Age); } } Console.ReadLine(); } }
输出结果:
按Id升序排列:
2 小月
3 张三日
4 李四月
按Id降序排列:
4 李四月
3 张三日
2 小月
按Age升序,按名字字数进行次要降序:
1 小日 15
3 张三日 17
2 小月 17
4 李四月 23
分组排序:
分组-排序键:23
4 李四月 23
分组-排序键:17
2 小月 17
3 张三日 17
分组-排序键:15
1 小日 15