LINQ操作符四:排序操作符

排序操作符,包括OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse,提供了升序或者降序排序。

OrderBy操作符将序列中的元素按照升序排列。

注意:orderby必须在select之前出现,查询表达式最后只可能出现select或者groupby。

student类:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace 排序操作符
 8 {
 9     public class Student
10     {
11
12         //姓名
13         public string Name { get; set; }
14         //成绩
15         public int Score { get; set; }
16         public int Order { get; set; }
17         //构造函数
18         public Student(string name, int score, int order)
19         {
20             this.Name = name;
21             this.Score = score;
22             this.Order = order;
23         }
24     }
25 }

teacher类:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace 排序操作符
 8 {
 9     /// <summary>
10     /// Teacher类
11     /// </summary>
12     public class Teacher
13     {
14         //姓名
15         public string Name { get; set; }
16         //学生集合
17         public List<Student> Students { get; set; }
18
19         public Teacher(string name, List<Student> students)
20         {
21             this.Name = name;
22             this.Students = students;
23         }
24     }
25 }

Program:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace 排序操作符
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //使用集合初始化器初始化Teacher集合
14             List<Teacher> teachers = new List<Teacher> {
15                new Teacher("徐老师",
16                new List<Student>(){
17                  new Student("宋江",80,1),
18                 new Student("卢俊义",95,2),
19                 new Student("朱武",45,3)
20                }
21                ),
22                 new Teacher("姜老师",
23                new List<Student>(){
24                  new Student("林冲",90,2),
25                 new Student("花荣",85,4),
26                 new Student("柴进",58,5)
27                }
28                ),
29                 new Teacher("樊老师",
30                new List<Student>(){
31                  new Student("关胜",100,6),
32                 new Student("阮小七",70,7),
33                 new Student("时迁",30,0)
34                }
35                )
36             };
37
38             #region OrderBy
39             //OrderBy 表达式
40             var queryOrderBy = from t in teachers
41                                from s in t.Students
42                                where s.Score < 60
43                                orderby s.Order
44                                select s;
45             //方法
46             var query = teachers.SelectMany(p => p.Students).Where(s => s.Score < 60).OrderBy(s => s.Order).Select(s => s);
47             foreach (var item in queryOrderBy)
48             {
49                 Console.WriteLine("姓名:"+item.Name+",分数:"+item.Score);
50             }
51             foreach (var item in query)
52             {
53                 Console.WriteLine("姓名:" + item.Name + ",分数:" + item.Score);
54             }
55             #endregion
56
57             Console.ReadKey();
58         }
59     }
60 }

运行结果:

二、OrderByDescending

OrderByDescending操作符将序列中的元素按照降序排列。

示例:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace 排序操作符
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //使用集合初始化器初始化Teacher集合
14             List<Teacher> teachers = new List<Teacher> {
15                new Teacher("徐老师",
16                new List<Student>(){
17                  new Student("宋江",80,1),
18                 new Student("卢俊义",95,2),
19                 new Student("朱武",45,3)
20                }
21                ),
22                 new Teacher("姜老师",
23                new List<Student>(){
24                  new Student("林冲",90,2),
25                 new Student("花荣",85,4),
26                 new Student("柴进",58,5)
27                }
28                ),
29                 new Teacher("樊老师",
30                new List<Student>(){
31                  new Student("关胜",100,6),
32                 new Student("阮小七",70,7),
33                 new Student("时迁",30,0)
34                }
35                )
36             };
37
38             #region OrderByDescending
39             //表达式
40             var queryDesc = from t in teachers
41                             from s in t.Students
42                             where s.Score < 60
43                             orderby s.Order descending
44                             select s;
45             //方法
46             var query1 = teachers.SelectMany(p => p.Students).Where(s => s.Score < 60).OrderByDescending(s => s.Order).Select(s => s);
47             foreach (var item in queryDesc)
48             {
49                 Console.WriteLine("姓名:" + item.Name + ",分数:" + item.Score);
50             }
51             foreach (var item in queryDesc)
52             {
53                 Console.WriteLine("姓名:" + item.Name + ",分数:" + item.Score);
54             }
55             #endregion
56
57             Console.ReadKey();
58         }
59     }
60 }

运行效果:

三、ThenBy排序

ThenBy操作符实现按照次关键字对序列进行升序排列。此操作符的查询语法和方法语法略有不同,例如:

//查询语法
var query=from e in Employees orderby e.FirstName,e.LastName  select e;
//方法语法
var q=Employees.OrderBy(e=>e.FirstName).ThenBy(e=>e.LastName).Select(e=>e);

示例:

Category类:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ThenBy
 8 {
 9     public class Category
10     {
11         public Guid CategoryId { get; set; }
12         public string CategoryName { get; set; }
13         public int Order { get; set; }
14     }
15 }

Products类:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ThenBy
 8 {
 9     public class Products
10     {
11         public Guid Id { get; set; }
12         public Guid CategoryId { get; set; }
13         public string Name { get; set; }
14         public int Order { get; set; }
15         public DateTime CreateTime { get; set; }
16     }
17 }

Program:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ThenBy
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             List<Products> pro = new List<Products>() {
14                new Products(){Id=Guid.NewGuid(),Name="格林童话",CategoryId=Guid.NewGuid(),Order=1,CreateTime=DateTime.Now.AddHours(2)},
15                new Products(){Id=Guid.NewGuid(),Name="美女与野兽",CategoryId=Guid.NewGuid(),Order=1,CreateTime=DateTime.Now},
16                new Products(){Id=Guid.NewGuid(),Name="世界如此险恶,您的内心需要强大",CategoryId=Guid.NewGuid(),Order=0,CreateTime=DateTime.Now.AddHours(3)}
17             };
18             //查询语法
19             var query = (from p in pro orderby p.Order, p.CreateTime select p);
20             //方法
21             var q = pro.OrderBy(p => p.Order).ThenBy(p => p.CreateTime).Select(p => p);
22             foreach (var item in query)
23             {
24                 Console.WriteLine("name:"+item.Name+"id:"+item.Id+",order:"+item.Order+",CreateTime:"+item.CreateTime);
25             }
26             foreach (var item in q)
27             {
28                 Console.WriteLine("name:" + item.Name + "id:" + item.Id + ",order:" + item.Order + ",CreateTime:" + item.CreateTime);
29             }
30
31             Console.ReadKey();
32         }
33     }
34 }

运行效果:

四、ThenByDescending

ThenByDescending操作符实现按照次关键字对序列进行降序排列。此操作符的查询语法与方法语法略有不同,例如:

//查询语法
var query=from e in Employees orderby e.FirstName,e.LastName descending  select e;
//方法语法
var q=Employees.OrderBy(e=>e.FirstName).ThenByDescending(e=>e.LastName).Select(e=>e);

示例:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ThenBy
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             List<Products> pro = new List<Products>() {
14                new Products(){Id=Guid.NewGuid(),Name="格林童话",CategoryId=Guid.NewGuid(),Order=1,CreateTime=DateTime.Now.AddHours(2)},
15                new Products(){Id=Guid.NewGuid(),Name="美女与野兽",CategoryId=Guid.NewGuid(),Order=1,CreateTime=DateTime.Now},
16                new Products(){Id=Guid.NewGuid(),Name="世界如此险恶,您的内心需要强大",CategoryId=Guid.NewGuid(),Order=0,CreateTime=DateTime.Now.AddHours(3)}
17             };
18             //查询语法
19             var query = from p in pro orderby p.Order, p.CreateTime descending select p;
20             //方法
21             var q = pro.OrderBy(p => p.Order).ThenByDescending(p => p.CreateTime);
22             foreach (var item in query)
23             {
24                 Console.WriteLine("name:" + item.Name + "id:" + item.Id + ",order:" + item.Order + ",CreateTime:" + item.CreateTime);
25             }
26             foreach (var item in q)
27             {
28                 Console.WriteLine("name:" + item.Name + "id:" + item.Id + ",order:" + item.Order + ",CreateTime:" + item.CreateTime);
29             }
30
31             Console.ReadKey();
32         }
33     }
34 }

运行效果:

五、Reverse

Reverse将会把序列中的元素按照从后到前的顺序反转。需要注意的是,Reverse方法的返回值是void,例如:

var q=Employees.Select(e=>e.FirstName).ToList();
q.Reverse();

示例:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ThenBy
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             string[] str = { "A", "B", "C", "D", "E"};
14             var query = str.Select(p => p).ToList();
15             query.Reverse();
16             foreach (var item in query)
17             {
18                 Console.WriteLine(item);
19             }
20
21             Console.ReadKey();
22         }
23     }
24 }

运行效果:

时间: 2024-10-28 20:47:44

LINQ操作符四:排序操作符的相关文章

LINQ系列:排序操作符

LINQ排序操作符包括:OrderBy.OrderByDescending.ThenBy.ThenByDescending及Reverse. 1. OrderBy 1>. 原型定义 public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> ke

C#编程(六十二)---------LINQ标准的查询操作符

LINQ标准的查询操作符 首先我们来看一下LINQ的操作符,可根据查询操作符的操作"类型"进行分类,如把它们分成投影,限制,排序,联接,分组,串联,聚合,集合,生成,转换,元素,相等,量词,分割等. 类型 操作符名称 投影操作符 Select,SelectMany 限制操作符 Where 排序操作符 OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse 联接操作符 Join,GroupJoin 分组操作符 GroupBy 串

C#高级编程六十二天----LINQ标准的查询操作符

LINQ标准的查询操作符 首先我们来看一下LINQ的操作符,可根据查询操作符的操作"类型"进行分类,如把它们分成投影,限制,排序,联接,分组,串联,聚合,集合,生成,转换,元素,相等,量词,分割等. 类型 操作符名称 投影操作符 Select,SelectMany 限制操作符 Where 排序操作符 OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse 联接操作符 Join,GroupJoin 分组操作符 GroupBy 串

LINQ to Entity Framework 操作符(转)

在开始了解LINQ to Entities之前,需要先对.NET Framework 3.5版本后对C#语言的几个扩展特性做一些阐释,这有助于我们更容易.更深刻的理解LINQ to Entities技术的原理与实现. 一.隐式实例化局部变量 .NET Framework 3.5后,实例化局部变量语法有了新的选择:使用“var”关键字隐式类型化: var user = new User(); 隐式类型化语法与Javascript语言里声明变量的语法类似,它可以一定程度上简化实例化局部变量的语法.但

JavaScript基本概念(四)---操作符

操作符 1.一元操作符 只能操作一个值的操作符叫做一元操作符,一元操作符有递增(递减)操作符以及一元加(减)操作符. 递增递减操作符分为前置递增(递减)操作符和后置递增(递减)操作符,不管是前置还是后置的递增(递减)操作符,其使用方式与java中的递增递减操作符一样,有区别的地方就是javascript中的递增递减操作符可以对非数字类型的值进行操作,看下面的例子: a.对包含有效数字字符的字符串执行递增递减操作时,会将字符串转换成数字后再执行递增递减操作.字符串最后转换为number类型. b.

LINQ之路14:LINQ Operators之排序和分组(Ordering and Grouping)

本篇继续LINQ Operators的介绍,这里要讨论的是LINQ中的排序和分组功能.LINQ的排序操作符有:OrderBy, OrderByDescending, ThenBy, 和ThenByDescending,他们返回input sequence的排序版本.分组操作符GroupBy把一个平展的输入sequence进行分组存放到输出sequence中. 排序/Ordering IEnumerable<TSource>→IOrderedEnumerable<TSource> O

Linq技术四:动态Linq技术 -- Linq.Expressions

前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; System.Linq.Expressions; 应用Linq的时候,我们都知道只需要Lambda表达式就行,但有些场景仅仅只使用Data Model的字段名操作是不够的或者不方便的. 场景1:假设我们需要拼接Where条件进行查询,一种方式可以拼接IQueryable的表达式.但我想像写SQL语句

switch_case,&amp;&amp;,||,条件操作符和逗号操作符,循环语句

一.switch-case switch-case语句主要用在多分支条件的环境中,在这种环境中使用if语句会存在烦琐且效率不高的弊端. switch(expression) { case const expression1: .... case const expression2; ... default: ... } 在执行过程中,expression的值会与每个case的值比较,实现switch语句的功能.关键字case和它所关联的值被称作case标号.每个case标号的值都必须是一个整形常

【C++ Primer每日一刷之十二】 箭头操作符,条件操作符,sizeof操作符,逗号,优先级

5.6. 箭头操作符 C++ 语言为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->).点操作符(第 1.5.2 节)用于获取类类型对象的成员: item1.same_isbn(item2); // run thesame_isbn member of item1 如果有一个指向 Sales_item 对象的指针(或迭代器),则在使用点操作符 前,需对该指针(或迭代器)进行解引用: Sales_item *sp = &item1; (*sp).same_isbn(item