我正在尝试获取用户列表及其上次登录日期。
我需要显示以下列
User Name
First Name
Last Name
Last Login Date
Role
Is Active
我遇到了困难,因为数据在两个表之间拆分: 用户表:
Users
UserId
UserName
FirstName
LastName
Role
IsActive
和LogonHistory表
LogonHistory
Id
Username
LoginDate
我尝试过使用 Join
、group
和 max
,但它只允许我使用 logonhistory 表中的属性。
这是我的加入
查询的示例:
var users = db.Users
.Join(db.LogonHistory, user => user.UserName, logon => logon.Username, (user, logon) => new UserSearchResults
{
UserName = user.UserName,
FirstName = user.FirstName,
LastName = user.LastName,
Email = user.Email,
IsActive = user.Active,
LoginHistory = logon.LoginDate
});
这是我的分组
查询示例:
var loginHistory = from l in db.LogonHistory
join u in db.Users on l.Username equals u.UserName
group l by l.Username into grp
let LastLoginDate = grp.Max(d => d.LoginDate)
from l in grp
where l.LoginDate == LastLoginDate
select l;
任何人都可以发现我做错了什么,或者推荐更好的方法吗?
编辑:
本质上,我需要做的是加入
用户名上的用户表和登录历史表,并返回用户的详细信息和最新的登录日期。
最佳答案
var lastlogins = from h in db.LogonHistory
group h by h.UserName into hgroup
select new
{
UserName = hgroup.Key,
LastLoginDate = hgroup.Max(x => x.LoginDate)
};
var query = from u in db.Users
join h in lastlogins on u.UserName equals h.Username
select new
{
u.UserName,
u.FirstName,
u.LastName,
u.Role,
u.IsActive,
h.LastLoginDate
};
关于c# - 使用 Linq 如何从两个表中获取用户列表及其上次登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40980506/