Linq问题,无法获得预期的数据C#

Pri*_*wal 3 c# linq

我有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; }
}
Run Code Online (Sandbox Code Playgroud)

和数据我有这个

    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
         }

       };
     }
Run Code Online (Sandbox Code Playgroud)

现在,我的要求是,我需要的学生由不同的StudentId地方SchoolYearId是最多为每个学生.

所以我期待的结果

   StudentId=100,
   Name="Shubham",
   SchoolYearId=2018,
   ClassId=1002                      

   StudentId=101,
   Name="Arpit",
   SchoolYearId=2017,
   ClassId=1101
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nko 7

你应该首先(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
Run Code Online (Sandbox Code Playgroud)