LINQ从多个记录中获取最新记录到列表

时间:2017-08-07 01:41:13

标签: c# linq

我有一张桌子

StudentName / Classroom / GradeA / GradeB / GradeC / GradeDate

学生的课堂是固定的,以便专栏永远不会改变。

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

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

  • Id
  • UpdateDate
  • 教室

ClassroomDetail

  • Id
  • Cm_Id(具有ClassroomMaster Id的外键)
  • 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);

2 个答案:

答案 0 :(得分:1)

我终于找到了解决方案: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)

它将解决您的问题

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