我正在翻译一个查询,下面是原文:
select top 5 t.usrID, u.FirstName, u.LastName, t.cnt as sCount
from (
select usrID, COUNT(rID) as cnt
from sessions as s where s.sDate > DATEADD(yy, -1, getdate())
group by usrID
) as t
inner join users as u on t.usrID = u.usrID
order by t.cnt desc
以下是我目前掌握的情况:
var topUser = (from p in _context.Sessions
where p.SDate > DateTime.Now.AddYears(-1)
join c in _context.Users on p.UsrId equals c.UsrId into j1
from j2 in j1.DefaultIfEmpty()
// group j2 by p.UsrId into grouped
select new
{
p.UsrId,
j2.FirstName,
j2.LastName,
cnt = p.RId
})
//.OrderBy(d => d.cnt)
//.GroupBy(o => o.UsrId)
.Take(5);
我不知道如何包含count()
和group by
子句。当我包含groupBy
时,其他列会消失。谢谢。
3条答案
按热度按时间laximzn51#
好吧,这不是最有效的,但它的工作:
cngwdvgl2#
khbbv19g3#
这是对你的答案的回答--不是对你最初的查询的回答。我想把它作为注解,但是不格式化它很难解释假设
User
对象有Session
的集合,你的第一个语句可以大大简化:您可以对结果进行整形,以获得一个同时具有FirstName和LastName的ViewModel。