编辑
2025-09-22
C#
00

目录

基本概念
Lambda 表达式
GroupBy 方法
应用场景与示例
按属性分组
按条件分组
按多个属性分组
结论

C# 的 Lambda 表达式提供了一种简洁的方式来编写匿名方法,极大地增强了代码的可读性和灵活性。结合 LINQ (Language Integrated Query) 的 GroupBy 方法,我们可以轻松地对集合进行分组处理,这在处理复杂数据结构时尤其有用。本文将通过几个实际例子,探讨 GroupBy 表达式的应用场景和使用方法。

基本概念

Lambda 表达式

Lambda 表达式是一种匿名函数,它允许你定义一个方法而不需要给它命名。它通常用于编写简短的回调函数或LINQ查询。

GroupBy 方法

GroupBy 方法是 LINQ 中的一个强大工具,它根据指定的键值对集合中的元素进行分组。这使得对数据进行分类和汇总变得非常简单。

应用场景与示例

按属性分组

假设我们有一个学生列表,每个学生有班级和成绩属性。我们想要按照班级将学生分组,并计算每个班级的平均成绩。

C#
public class Student { public string Class { get; set; } public int Score { get; set; } } var students = new List<Student> { new Student { Class = "1A", Score = 85 }, new Student { Class = "1B", Score = 90 }, new Student { Class = "1A", Score = 78 }, new Student { Class = "1B", Score = 82 }, }; var groupedByClass = students.GroupBy(s => s.Class).Select(g => new { Class = g.Key, AverageScore = g.Average(s => s.Score) }); foreach (var group in groupedByClass) { Console.WriteLine($"Class: {group.Class}, Average Score: {group.AverageScore}"); }

image.png

按条件分组

假设我们需要根据学生的成绩将学生分为“及格”和“不及格”两组。

C#
var passFailGroups = students.GroupBy(s => s.Score >= 80 ? "Pass" : "Fail").Select(g => new { Category = g.Key, Students = g.ToList() }); foreach (var group in passFailGroups) { Console.WriteLine($"Category: {group.Category}"); foreach (var student in group.Students) { Console.WriteLine($" - Class: {student.Class}, Score: {student.Score}"); } }

image.png

按多个属性分组

我们可以使用元组或匿名类型将元素按多个键分组。假设我们要按班级和是否及格两个条件分组。

C#
var multiKeyGroup = students.GroupBy(s => new { s.Class, Category = s.Score >= 80 ? "Pass" : "Fail" }) .Select(g => new { g.Key.Class, g.Key.Category, Students = g.ToList() }); foreach (var group in multiKeyGroup) { Console.WriteLine($"Class: {group.Class}, Category: {group.Category}"); foreach (var student in group.Students) { Console.WriteLine($" - Score: {student.Score}"); } }

image.png

结论

通过上述例子,我们可以看到 C# 中的 Lambda 表达式和 GroupBy 方法如何帮助我们以极其简洁和有效的方式处理和分析数据。无论是基于单一属性还是多个属性的分组,或是根据特定条件进行分类,这些工具都能提供强大的支持。掌握了这些技巧,你将能够更加自如地处理复杂的数据集合,编写出更加简洁和高效的代码。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!