c# - Linq 问题,无法获取预期数据 C#
问题描述
我有List<Student>
如下数据的对象
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int SchoolYearId { get; set; }
public int ClassId { get; set; }
}
&数据我有这个
public List<Student> StudentData()
{
return new List<Student>
{
new Student
{
StudentId=100,
Name="Shubham",
SchoolYearId=2016,
ClassId=1000
},
new Student
{
StudentId=100,
Name="Shubham",
SchoolYearId=2017,
ClassId=1001
},
new Student
{
StudentId=100,
Name="Shubham",
SchoolYearId=2018,
ClassId=1002
},
new Student
{
StudentId=101,
Name="Arpit",
SchoolYearId=2016,
ClassId=1100
},
new Student
{
StudentId=101,
Name="Arpit",
SchoolYearId=2017,
ClassId=1101
}
};
}
现在我的要求是,我需要根据每个学生的 MaxStudentId
在哪里来区分学生。SchoolYearId
所以我期待的结果
StudentId=100,
Name="Shubham",
SchoolYearId=2018,
ClassId=1002
StudentId=101,
Name="Arpit",
SchoolYearId=2017,
ClassId=1101
解决方案
您应该首先按( ) 分组,然后在每个组内GroupBy
计算argmax ;唉,Linq没有ArgMax
,但它可以很容易地通过Aggregate
var result = StudentData()
.GroupBy(student => student.StudentId)
.Select(group => group
.Aggregate((s, a) => s.SchoolYearId > a.SchoolYearId ? s : a))
.ToList(); // Let's materialize into list
推荐阅读
- amazon-web-services - AWS boto3 如何从密钥中获取元数据?
- linux - 外壳上的 crontab
- visual-studio-code - 如何在vs代码工作区中自动收缩多根文件夹
- azure-synapse - 写入增量接收器时对数据进行分区
- javascript - 在我的终端节点(文件名)命令不起作用它没有显示如何修复它?
- python - 使用 Pika 使用 RabbitMq 并使用 Socket.io 推送
- python-3.x - 在 Jupiter Notebook 中用 ipywidget 链接两个数字
- android - 如何在 Uri 中设置图像
- mongodb - 将对象附加到嵌套对象内的数组中
- r - 如何按 R 中的区域对 DF 内的 ID 求和?