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(" 按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(" 按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(" 分组排序:"); 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