📜  LINQ |分类运算符|然后降序(1)

📅  最后修改于: 2023-12-03 15:32:39.444000             🧑  作者: Mango

LINQ |分类运算符|然后降序

LINQ (Language Integrated Query)是.NET Framework 3.5版本后引入的一组语言扩展,使得程序员可以使用类似SQL的查询语句来查询和操作各种数据源,如数组、列表、集合、数据库等。分类运算符是其中的一类,它主要用于对数据源进行分类、分组、分区等相关操作。而本文则将介绍如何对分类结果进行排序,即使用“然后降序”操作。

分类运算符

分类运算符主要有以下几种:

  • GroupBy:按照指定的键将数据源分组,并返回每个组的键和组成员集合。
  • ToLookup:与GroupBy类似,不同的是它返回的是一个ILookup<TKey, TElement>对象,可以像字典一样使用,直接通过键获取分组后的集合。
  • PartitionBy:将数据源分区,即将连续的序列段分组,并返回每个分区序列的键和序列本身。
  • GroupJoin:与Join类似,不过其返回的是分组后的结果集,其中每个组将对应多个匹配的元素,而不是只有一个。
然后降序

分类运算符对数据源进行分类操作后,结果集的顺序往往与原数据源中的顺序不同。如果需要对结果集进行排序,则可以使用LINQ中的“然后降序”(ThenByDescending)操作。该操作可以在先按照一个键排序的基础上,再按照另一个键进行排序,且后者是降序排列的。具体示例如下:

var students = new List<Student>
{
    new Student {Name = "张三", Age = 20, Grade = 95},
    new Student {Name = "李四", Age = 18, Grade = 80},
    new Student {Name = "王五", Age = 22, Grade = 90},
    new Student {Name = "赵六", Age = 19, Grade = 85},
    new Student {Name = "钱七", Age = 21, Grade = 95},
};

var groups = from s in students
             group s by s.Grade into g
             orderby g.Key descending // 先按照Grade降序排序
             select new {Grade = g.Key, Students = g};

foreach (var g in groups)
{
    Console.WriteLine($"得分为:{g.Grade}的学生共有{g.Students.Count()}人,他们是:");
    foreach (var s in g.Students.OrderByDescending(s => s.Age)) // 然后按照Age降序排序
    {
        Console.WriteLine($"姓名:{s.Name},年龄:{s.Age}");
    }
}

在上述示例中,我们首先按照学生的成绩(Grade)对数据源进行了分组,得到了各个成绩段的学生集合。而在每个成绩段中的学生,则根据其年龄(Age)进行了降序排列。这就是“然后降序”的操作。

总结

通过运用分类运算符和“然后降序”操作,我们可以非常方便地对数据源进行分类、分组、分区等操作,并对结果集进行排序。这一系列操作对于程序员来说,无疑是非常实用和高效的。