在LINQ(Language Integrated Query,语言集成查询)中,分组是一种常见的操作,它允许你根据某个键将数据集合分成多个组。LINQ 提供了 GroupBy
方法来实现这一功能。
GroupBy
方法用于将集合中的元素根据指定的键进行分组。每个组包含具有相同键的所有元素。分组操作通常与聚合函数(如 Count
, Sum
, Average
等)结合使用,以便对每个组进行进一步的处理。
假设我们有一个包含学生信息的列表,每个学生有姓名、年龄和班级属性。我们希望按班级对学生进行分组。
using System;
using System.Collections.Generic;
using System.Linq;
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Class { get; set; }
}
public class Program
{
public static void Main()
{
List<Student> students = new List<Student>
{
new Student { Name = "Alice", Age = 20, Class = "A" },
new Student { Name = "Bob", Age = 22, Class = "B" },
new Student { Name = "Charlie", Age = 21, Class = "A" },
new Student { Name = "David", Age = 23, Class = "B" }
};
var groupedStudents = students.GroupBy(s => s.Class);
foreach (var group in groupedStudents)
{
Console.WriteLine($"Class: {group.Key}");
foreach (var student in group)
{
Console.WriteLine($" {student.Name}, Age: {student.Age}");
}
}
}
}
Class: A
Alice, Age: 20
Charlie, Age: 21
Class: B
Bob, Age: 22
David, Age: 23
GroupBy
方法返回的是一个 IEnumerable<IGrouping<TKey, TElement>>
类型的集合,其中:
TKey
是分组的键的类型。TElement
是分组中元素的类型。原因:LINQ 的 GroupBy
操作默认不保证分组的顺序。
解决方法:可以在分组后使用 OrderBy
方法对结果进行排序。
var groupedStudentsSorted = students.GroupBy(s => s.Class).OrderBy(g => g.Key);
原因:如果分组键可能为空,会导致运行时错误。
解决方法:在进行分组前,过滤掉键为空的元素。
var groupedStudentsNonNullClass = students.Where(s => s.Class != null).GroupBy(s => s.Class);
通过这些方法和技巧,你可以有效地在 LINQ 中进行数据分组操作。
领取专属 10元无门槛券
手把手带您无忧上云