EF Core group by 和 order by

Posted

技术标签:

【中文标题】EF Core group by 和 order by【英文标题】:EF Core group by and order by 【发布时间】:2022-01-16 02:00:27 【问题描述】:

我有一个 emp 表,其中 emps 已登录我正在尝试查找当前 emp 上次登录的日期是我尝试的查询。按每个员工上次登录时间及其详细信息分组。

var result = this.EMP.Where(a => a.Time.Date == DateTime.Now.Date)
                     .GroupBy(a => a.empname)
                     .Select(g => g.OrderByDescending(a => a.Time))
                     .FirstOrDefault();

我正在尝试通过降序排列并为每位员工排在前 1 位。我收到错误

最终投影中的集合必须是 'IEnumerable

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

试试这个

var result = this.EMP
          .Where(a => a.Time.Date == DateTime.Now.Date)
          .GroupBy(a => new  a.empname, a.Time)
          .OrderByDescending(a => a.Key.Time))
          .Select(g => new 
             
             Empname= g.Key.EmpName,
             Time = g.Key.Time
             ).FirstOrDefalt();

【讨论】:

serge 感谢这给了我尝试与每个员工的最后一次登录时间的第一组,因此组结果将是 EMP1 lastlogintime Desc,EMP2 lastlogintime desc 以及该特定员工的详细信息整行值。 修改位如下var result = this.EMP .Where(a => a.Time.Date == DateTime.Now.Date) .GroupBy(a => new a.empname) .Select(g => new Empname= g.Key.EmpName, Time = g.Max(x => x.Time) ) 得到每个人最后登录时间的结果。现在我需要获取整个记录,它给出了关键列 personname,lastlogintime 我需要获取所有列值。【参考方案2】:

我就是这样解决的

  var empids= this.EMP
              .Where(a => a.Time.Date == DateTime.Now.Date)
              .GroupBy(a => new  a.empname)
              .Select(g =>g.Max(x => x.ID)).ToList();

在另一个查询中

var emprecords=this.EMP.Where(e=>empids.Contains(e.ID))

         

【讨论】:

不确定是否有办法将其作为一个查询而不是分成两部分。

以上是关于EF Core group by 和 order by的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 3 - 不必要的 ORDER BY 减慢查询

order by 和 group by 的区别

order by 和 group by 的区别?

sql中group by和order by的区别

sql语句执行顺序之group by、order by

SQL中,group by 跟order by有什么区别?