当前位置:首页 > C# > 正文

C# LINQ GroupBy 分组聚合详解(零基础掌握LINQ数据分组与聚合操作)

在C#开发中,处理集合数据是日常任务之一。而 LINQ(Language Integrated Query) 提供了一种强大且直观的方式来查询和操作数据。其中,GroupBy 方法是实现数据分组与聚合的核心工具。本教程将从零开始,带你深入理解如何使用 C# LINQ GroupBy 对数据进行分组、统计和汇总,即使你是编程小白也能轻松上手!

C# LINQ GroupBy 分组聚合详解(零基础掌握LINQ数据分组与聚合操作)  LINQ分组聚合 C#数据分组教程 GroupBy示例 第1张

什么是 GroupBy?

GroupBy 是 LINQ 中的一个方法,用于将集合中的元素按照某个键(key)进行分组。例如,你可以按部门对员工分组、按年份对订单分组,或者按产品类别对商品分组。

分组后,每个组都包含一个“键”和一组属于该键的元素。你还可以对每个组进行聚合操作,如求和(Sum)、计数(Count)、平均值(Average)等。

基础语法

最简单的 GroupBy 用法如下:

var groups = source.GroupBy(item => item.KeyProperty);

其中 source 是你的数据源(如 List、Array 等),KeyProperty 是你希望用来分组的属性。

实战示例:学生成绩分组统计

假设我们有一组学生数据,每个学生有姓名、班级和分数。我们想按班级分组,并计算每个班级的平均分和学生人数。

首先定义学生类:

public class Student{    public string Name { get; set; }    public string Class { get; set; }    public int Score { get; set; }}

然后创建一些测试数据:

var students = new List{    new Student { Name = "张三", Class = "A班", Score = 85 },    new Student { Name = "李四", Class = "B班", Score = 92 },    new Student { Name = "王五", Class = "A班", Score = 78 },    new Student { Name = "赵六", Class = "B班", Score = 88 },    new Student { Name = "孙七", Class = "A班", Score = 90 }};

接下来使用 GroupBy 按班级分组并聚合数据:

var classStats = students    .GroupBy(s => s.Class)    .Select(g => new    {        ClassName = g.Key,        StudentCount = g.Count(),        AverageScore = g.Average(s => s.Score),        TotalScore = g.Sum(s => s.Score)    })    .ToList();// 输出结果foreach (var stat in classStats){    Console.WriteLine($"班级: {stat.ClassName}, 人数: {stat.StudentCount}, 平均分: {stat.AverageScore:F2}, 总分: {stat.TotalScore}");}

运行结果:

班级: A班, 人数: 3, 平均分: 84.33, 总分: 253班级: B班, 人数: 2, 平均分: 90.00, 总分: 180

高级技巧:多字段分组

有时你需要按多个字段分组,比如同时按“年级”和“班级”分组。这时可以使用匿名对象作为分组键:

var multiGroup = students    .GroupBy(s => new { s.Grade, s.Class })    .Select(g => new    {        Grade = g.Key.Grade,        Class = g.Key.Class,        Count = g.Count()    });

常见应用场景

  • 电商系统中按商品类别统计销量
  • 日志分析中按日期或错误级别分组
  • 财务系统中按部门汇总支出
  • 报表生成中对数据进行分类汇总

总结

通过本教程,你已经掌握了 C# LINQ GroupBy 的基本用法和实际应用。无论是简单的单字段分组,还是复杂的多字段聚合,GroupBy 都能帮你高效地完成数据整理任务。记住,结合 SelectSumAverage 等方法,你可以轻松构建强大的数据查询逻辑。

如果你正在学习 LINQ分组聚合 或需要一份实用的 C#数据分组教程,希望这篇 LINQ GroupBy示例 能为你提供清晰的指引!