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的主要内容,如果未能解决你的问题,请参考以下文章