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
    LoginDate

我尝试过使用 Joingroupmax,但它只允许我使用 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/

相关文章:

c# - `Where` 子句返回空列表,即使逻辑测试是 `true`

c# - 通过 LINQ 在列表中查找项目

c# - List<T> 和 ArrayList 默认容量

c# - 检查是否存在响应给定 URI 的应用程序

c# - 使用 LINQ,如何将分层 XML 加载到 POCO 中?

c# - 检查 IEnumerable(Of T) 中是否没有元素 - Linq 元素和量词运算符

c# - Excel 互操作阻止显示密码对话框

c# - 将旧的 Unity 代码升级到 Unity 5

sql - 按组从表中获取Max()记录

c# - 从另一个集合更新集合的有效方法