C# 使用Linq如何从两个表中获取用户列表及其上次登录
我正在尝试获取用户列表,以及他们的上次登录日期 我需要显示以下列C# 使用Linq如何从两个表中获取用户列表及其上次登录,c#,linq,C#,Linq,我正在尝试获取用户列表,以及他们的上次登录日期 我需要显示以下列 User Name First Name Last Name Last Login Date Role Is Active 我遇到了困难,因为数据在两个表之间分割: 用户表: Users UserId UserName FirstName LastName Role IsActive 和LogonHistory表 LogonHistory Id Username
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和MAXA,但它只允许我使用logonhistory表中的属性
以下是我的joinquery示例:
下面是我的分组查询示例:
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;
有人能发现我做错了什么,或者推荐一种更好的方法吗
编辑:
基本上,我需要做的是在用户名上加入用户表和LogonHistory表,并返回用户的详细信息和最新登录日期。如果您使用的是EntityFramework:
var loginHistory = db.Users.select(e => new {
e.UserName,
e.FirstName,
e.LastName,
e.Role,
e.IsActive,
e.LogonHistory.OrderByDescending(ee=>ee.LoginDate).FirstOrDefault().LoginDate
});
如果您使用的是EntityFramework:
var loginHistory = db.Users.select(e => new {
e.UserName,
e.FirstName,
e.LastName,
e.Role,
e.IsActive,
e.LogonHistory.OrderByDescending(ee=>ee.LoginDate).FirstOrDefault().LoginDate
});
您应该改用导航属性。您的查询如下:
var loginHistory= db.Users.Select(user => new UserSearchResults
{
UserName = user.UserName,
FirstName = user.FirstName,
LastName = user.LastName,
Email = user.Email,
IsActive = user.Active,
LastLoginDate=user.LogonHistory
.OrderByDescending(e=>e.LoginDate)
.FirstOrDefault().LoginDate
});
您应该改用导航属性。您的查询如下:
var loginHistory= db.Users.Select(user => new UserSearchResults
{
UserName = user.UserName,
FirstName = user.FirstName,
LastName = user.LastName,
Email = user.Email,
IsActive = user.Active,
LastLoginDate=user.LogonHistory
.OrderByDescending(e=>e.LoginDate)
.FirstOrDefault().LoginDate
});
您使用的是实体框架吗?是的,我使用的是实体框架。您使用的是实体框架吗?是的,我使用的是实体框架。您的解决方案的问题是EF可以以任何特定顺序检索与用户关联的LogonHistory,不保证它们以相同的顺序插入,这就是为什么我使用order By您的解决方案的问题是EF可以以任何特定顺序检索与用户关联的LogonHistory,不能保证它们以相同的顺序插入,这就是为什么我使用order By我现在明白您在做什么了。但是我没有得到正确的结果,因为当创建表时,LogonHistory和用户没有通过主键关联,所以EF不能执行user.LogonHistory。不过这是个很好的回答,谢谢。我现在明白你在做什么了。但是我没有得到正确的结果,因为当创建表时,LogonHistory和用户没有通过主键关联,所以EF不能执行user.LogonHistory。不过这是一个很好的答案,谢谢。