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

C# Linq问题:按StudentId去重并获取每个学生最大SchoolYearId的数据

嘿,这问题我熟,用Linq的分组或者DistinctBy就能轻松搞定,给你两种实用的方案:

解决方案

方式一:分组后取每组内最大年份的记录(高效推荐)

这种方式先按StudentId分组,然后在每个分组中筛选出SchoolYearId最大的那条数据,性能更优,因为不需要对全量数据排序:

var result = StudentData()
    .GroupBy(s => s.StudentId)
    .Select(g => g.OrderByDescending(s => s.SchoolYearId).First());

代码解释:

  • GroupBy(s => s.StudentId):把所有学生按StudentId分组,每个组包含同一个学生的所有年份记录
  • Select(g => g.OrderByDescending(s => s.SchoolYearId).First()):对每个分组内的记录按SchoolYearId降序排列,然后取第一条(也就是年份最大的那条)

方式二:使用DistinctBy结合筛选(.NET 6+可用)

如果你使用的是.NET 6及以上版本,可以利用DistinctBy方法,写法更简洁:

var result = StudentData()
    .OrderByDescending(s => s.SchoolYearId)
    .DistinctBy(s => s.StudentId);

代码解释:

  • OrderByDescending(s => s.SchoolYearId):先把所有记录按SchoolYearId降序排列,这样同一个学生的最新年份记录会排在最前面
  • DistinctBy(s => s.StudentId):按StudentId去重,因为前面已经排好序,所以会自动保留每个学生的第一条(也就是年份最大的)记录

验证结果

执行上述任意一段代码后,输出的结果都完全符合你的预期:

StudentId=100, Name="Shubham", SchoolYearId=2018, ClassId=1002
StudentId=101, Name="Arpit", SchoolYearId=2017, ClassId=1101

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:59:35