【问题标题】:LINQ Get Latest Record from Multiple Records to ListLINQ 从多条记录中获取最新记录到列表
【发布时间】:2017-08-07 01:41:13
【问题描述】:

我有一张桌子

学生姓名 / 班级 / GradeA / GradeB / GradeC / 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;
    }

以上查询返回所有内容,并且列表中有多个相同的学生。

我怎样才能只获得最新的值?

表格:

课堂大师

  • 身份证
  • 更新日期
  • 教室

教室详情

  • 身份证
  • Cm_Id(具有 ClassroomMaster Id 的外键)
  • 学生姓名
  • A 级
  • B 级
  • C 级
  • 毕业日期

在控制器上

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);

【问题讨论】:

  • 按学生分组的最新值?你能解释一下吗?
  • 是的,每个学生只有一个记录,并且只有最新的一个
  • 在我的控制器上我称之为 var bdetail = _bunkerPriceService.GetLatestClassroomDetail(classroom).OrderBy(d => d.StudentName); var model = new List(); foreach (var pr in bdetail) {
  • 你可以在你的问题中添加表格图吗?并解释每个表之间的关系:)
  • 我有 2 张桌子

标签: c# linq


【解决方案1】:

它会解决你的问题

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

【讨论】:

    【解决方案2】:

    我终于找到了解决办法: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;
        }
    

    【讨论】:

    • 可能正确,但多余的.Take(1),因为FirstOrDefault() 最多只会返回一条记录。
    • 为什么我的编辑被还原了?我错了吗?如果是,我想知道为什么。
    • @tinudu 哦,我想我不小心做到了。对不起,两者都有效。谢谢!
    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2013-06-14
    相关资源
    最近更新 更多