【问题标题】:EF Core group by and order byEF Core group by 和 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

有人可以帮忙吗?

【问题讨论】:

    标签: entity-framework linq entity-framework-core


    【解决方案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))
    
             
    

    【讨论】:

    • 不确定是否有办法将其作为一个查询而不是分成两部分。
    猜你喜欢
    • 2011-06-28
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多