You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Linq实现数据透视,将性别字段转为聚合列优化数据结构?

用LINQ高效聚合学生数据,解决重复行问题

我太懂这种用循环处理重复数据的痛苦了——效率低不说,代码还乱糟糟的。咱们直接用LINQ一步搞定这个聚合需求!

先再明确下你的数据情况:

原始数据

CourseClassSexCount
MathJuniorM20
MathJuniorF15
OtherOtherM10
OtherOtherF15

目标格式

CourseClassMaleFemale
MathJunior2015
OtherOther1015

LINQ实现方案

假设你的原始数据是一个集合(比如List<StudentRecord>,其中StudentRecord包含Course、Class、Sex、Count这几个属性),直接用GroupBy+Select就能完成聚合:

// 先按Course和Class分组,确保同课程同班级的记录归为一组
var aggregatedResult = studentRecords
    .GroupBy(record => new { record.Course, record.Class })
    .Select(group => new
    {
        group.Key.Course,
        group.Key.Class,
        // 统计组内性别为M的总人数
        Male = group.Where(r => r.Sex == "M").Sum(r => r.Count),
        // 统计组内性别为F的总人数
        Female = group.Where(r => r.Sex == "F").Sum(r => r.Count)
    });

为什么这比循环高效?

  • LINQ的GroupBy只会遍历数据源一次,把符合分组条件的记录归类,不像循环那样要反复查询整个集合
  • 如果某个性别在分组里没有数据,Sum会自动返回0,完美适配可能的空值场景
  • 代码更简洁易读,逻辑一目了然

要是你想进一步优化性能,还可以在分组里用ToDictionary提前映射性别和数量,不过上面的写法已经足够应对大多数场景啦!

内容的提问来源于stack exchange,提问作者smned

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:03:24