首页 > 解决方案 > 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

标签: c#linq

解决方案


您应该首先( ) 分组,然后在每个组内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

推荐阅读