以下SQL Server查询返回用户成功登录的总数和上次登录(日期类型)。这个查询的LINQ等价物是什么?
SELECT username, COUNT(LoginDate) AS total,
MAX(LoginDate) AS last_login
FROM login_history
GROUP BY username
无法计算出以下内容中的last_login值:
var query = _context.login_history.GroupBy(u => u.userName, (key, values) => new { user_name = key, count = values.Count(), last_login = ???? });
更新:
例如,每次用户登录他/她的记录时都会添加如下内容。请注意,命中列只是一个计数器,为每个登录记录添加1。在下面的示例中,jsmith
到目前为止共记录了5次,而他上一次登录的时间是7/24/2016 9:16
。下面第二个表中显示的T-Sql查询结果反映了jsmith的总登录次数和上次登录日期:
UserName Login_hit LoginDate
jsmith 1 7/20/2016 13:37
jsmith 1 7/19/2016 10:40
jsmith 1 7/24/2016 9:16
jsmith 1 7/19/2016 9:16
jsmith 1 7/15/2016 14:55
bdoe 1 7/15/2016 14:55
....
SQL Server中SQL查询的结果:
UserName |Total Logins | LasLoginDate
jsmith | 5 | 7/24/2016 9:16
bdoe | 79 | 7/12/2016 14:41
talbert | 23 | 7/8/2016 22:51
bdole | 87 | 7/21/2016 17:56
mdukakus | 31 | 7/22/2016 9:01
答案 0 :(得分:3)
使用Max
扩展方法:
var query = _context.login_history
.GroupBy(u => u.userName,
(key, values) => new { user_name = key,
count = values.Count(),
last_login = values.Max(e=>e.LoginDate)
});
答案 1 :(得分:1)
试试这个:
var query = from lh in login_history
group lh by new
{
user_name = lh.user_name
} into g
select new {
user_name = g.Key.user_name,
count = g.Count(),
last_login = g.Max(l => l.LoginDate)
};