Linq GroupBy方法详解及应用实例

4星 · 超过85%的资源 需积分: 34 8 下载量 188 浏览量 更新于2024-09-14 收藏 119KB DOCX 举报
Linq中的GroupBy方法是.NET框架中 LINQ(Language Integrated Query)库中的一个重要功能,它允许你在LINQ查询中对集合进行分组操作,以便按照特定键对数据进行聚合。在SQL中,分组通常用于统计、汇总或分类数据,例如计算每个类别的总和、平均值等。Linq的GroupBy方法同样具备这样的能力,它将对象按照指定的键(Key)进行分组,并可以进一步对每个组内的元素执行自定义操作。 在给出的示例中,我们有一个名为`StudentScore`的类,包含学生的基本信息如ID、姓名、课程名、分数和学期。假设我们想要按学期和课程对学生分数进行分组并计算每个学生的各科平均分,我们可以使用Linq的GroupBy方法来实现这个需求。 首先,创建一个`StudentScore`列表,模拟一个学生分数数据集。然后,我们可以用以下步骤使用GroupBy方法: 1. 定义一个查询上下文,选择要分组的属性: ```csharp var scores = lst.AsEnumerable<StudentScore>() .GroupBy(student => new { student.Term, student.Course }); ``` 这里,`AsEnumerable()`将`List<StudentScore>`转换为`IEnumerable<StudentScore>`,使其支持LINQ操作。`GroupBy`方法接受一个匿名类型作为参数,该类型包含了我们希望分组的字段:学期(Term)和课程(Course)。 2. 对每个组执行聚合操作,比如计算平均分: ```csharp var result = scores.Select(group => new { Term = group.Key.Term, Course = group.Key.Course, AverageScore = group.Average(student => student.Score) }); ``` `Select`方法用于根据每个组执行操作,这里我们为每个组创建一个新的匿名类型,包含分组依据的学期和课程,以及这些学生分数的平均值。 3. 最后,`result`变量将是一个新的序列,其中包含了每个学期和课程下学生的平均分数。 通过使用Linq的GroupBy方法,我们可以轻松地从原始数据中提取出按学期和课程划分的学生分数分布及其平均值,这对于数据分析和报表生成非常有用。同时,Linq的链式查询风格使得代码清晰且易于阅读,提高了开发效率。