C#-Group By 的使用

简介: group by 是linq中的分组功能,能通过给定的字段对数据集进行分组,得到分组后的结果。

group by 是linq中的分组功能,能通过给定的字段对数据集进行分组,得到分组后的结果。

基本用法

使用扩展函数GroupBy对数据集合通过给定的字段进行分组,新建一个基于.net6的控制台项目,在program.cs中写如下代码,通过班级将学生进行分组展示(顶级语句 ,从 C# 9 开始,无需在控制台应用程序项目中显式包含 Main 方法。 相反,可以使用顶级语句功能最大程度地减少必须编写的代码。 在这种情况下,编译器将为应用程序生成类和 Main 方法入口点。):

// See https://aka.ms/new-console-template for more information
List<Student> students = new List<Student>() {
    new Student(){Name="1",Classroom="a"},
    new Student(){Name="2",Classroom="a"},
    new Student(){Name="3",Classroom="b"},
    new Student(){Name="4",Classroom="b"}
};
var groupStudents=students.GroupBy(student=>student.Classroom);
foreach(var groupStudent in groupStudents)
{
    Console.WriteLine(groupStudent.Key);
    foreach(var student in groupStudent)
    {
        Console.WriteLine($"{student.Name},{student.Classroom}");
    }
}
public class Student
{
    public string Name { get; set; }
    public string Classroom { get; set; }
}

分组求和

统计某同学的总分,参考代码:

// See https://aka.ms/new-console-template for more information
List<Student> students = new List<Student>() {
    new Student(){Name="小明",Classroom="a班",Subjects="数学",Score=100},
    new Student(){Name="小彭",Classroom="a班",Subjects="数学",Score=100},
    new Student(){Name="小明",Classroom="a班",Subjects="语文",Score=90},
    new Student(){Name="小黄",Classroom="b班",Subjects="语文",Score=90}
};
var groupStudents = from student in students
                    group student by new { student.Name, student.Classroom }
                    into res
                    select new Student
                    {
                        Name = res.First().Name,
                        Classroom = res.First().Classroom,
                        Subjects = "已考科目总分",
                        Score = res.Sum(x => x.Score),
                    };
foreach (var groupStudent in groupStudents)
{
    Console.WriteLine($"{groupStudent.Name},{groupStudent.Classroom},{groupStudent.Subjects},{groupStudent.Score}");
}
public class Student
{
    /// <summary>
    /// 姓名
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 班级
    /// </summary>
    public string Classroom { get; set; }
    /// <summary>
    /// 科目
    /// </summary>
    public string Subjects { get; set; }
    /// <summary>
    /// 分数
    /// </summary>
    public float Score { get; set; }
}

目录
相关文章
|
5月前
|
开发框架 .NET C#
ASP.Net c# 正则表达式 子表达式 group
ASP.Net c# 正则表达式 子表达式 group
36 0
|
1月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---group和join相关用法(三)
C#学习相关系列之Linq用法---group和join相关用法(三)
|
存储 .NET C#
C# LINQ 详解 From Where Select Group Into OrderBy Let Join
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述     LINQ的全称是Language Integrated Query,中文译成“语言集成查询”。
1977 0
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
22 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
79 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
61 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
数据采集 前端开发 C#
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
Twitter是全球最大的社交媒体平台之一,包含丰富的音频资源。用户可以在Twitter上发布、转发、评论和收听各种音频内容,如音乐、播客、新闻、故事等,直接从Twitter抓取音频数据并非易事,尤其是在考虑到可能的封锁和反爬虫机制。Twitter会对频繁访问的IP地址进行限制或封禁,以防止恶意爬虫的行为。因此,我们需要使用一些技术手段来规避这些障碍,确保稳定而高效的数据访问。
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频