LINQ获得来自多个记录的最新记录列出

问题描述:

我作为LINQ获得来自多个记录的最新记录列出

StudentName /教室/ GradeA/GradeB /格拉代茨/ GradeDate

学生教室是固定的,这样列永远不会改变的表。

每个学生都有不同的GradeDate的多个GradeA,GradeB和GradeC值。

public virtual IList<ClassroomDetail> GetLatestClassroomDetail(string classroom) 
    { 

     var query = from pc in _classroomDetailRepository.Table 
        where pc.Classroom == classroom 
        select pc; 

     var result = new List<ClassroomDetail>(query); 

     return result; 
    } 

上面的查询返回一切,列表中有多个同样的学生。

我怎样才能得到最新的价值?

表:

ClassroomMaster

  • 编号
  • UpdateDate
  • 课堂

ClassroomDetail

  • 编号
  • CM_ID(与ClassroomMaster标识外键)
  • StudentName
  • GradeA
  • GradeB
  • 格拉代茨
  • GradeDate

在控制器

var bdetail = _classroomService.GetLatestClassroomDetail(classroom).OrderBy(d => d.StudentName); 

      var model = new List<ClassroomDetail>(); 
      foreach (var pr in bdetail) 
      { 

       model.Add(new ClassroomDetail 
       { 
        Id = pr.Id, 
        Classroom = pr.Classroom, 
        StudentName = pr.StudentName, 
        GradeA = pr.GradeA, 
        GradeB = pr.GradeB, 
        GradeC = pr.GradeC, 
        GradeDate = pr.GradeDate, 
       }); 
      } 


      return PartialView(model); 
+0

最新值分组?你能解释更多吗? – CodeNotFound

+0

是的,每个学生将会有一个记录,并且只有最新的一个记录 –

+0

,并且在我的控制器上我称之为var bdetail = _bunkerPriceService.GetLatestClassroomDetail(教室).OrderBy(d => d.StudentName); var model = new List (); foreach(var pr in bdetail) { –

这将解决你的问题由学生

 var query = _classroomDetailRepository.Table 
     .Where(a => a.Classroom == classroom)    
     .Select(b => b.OrderByDescending(y => y.GradeDate).Take(1).FirstOrDefault()); 

我终于找到了解决办法:d

public virtual IList<ClassroomDetail> GetLatestClassroomDetail(string classroom) 
    { 
     var query = _classroomDetailRepository.Table 
      .Where(z => z.Classroom == classroom) 
      .GroupBy(x => x.StudentName)     
      .Select(x => x.OrderByDescending(y => y.GradeDate).Take(1).FirstOrDefault()); 

     var result = new List<BunkerPriceDetail>(query); 

     return result; 
    } 
+1

大概正确,但冗余'。取(1)',因为'FirstOrDefault()'只返回最多一条记录。 – tinudu

+1

为什么我的编辑恢复了?我错了吗?如果是的话,我想知道为什么。 – tinudu

+0

@tinudu ohhh,我猜我不小心做到了。对不起,这两个作品。谢谢! –