LINQ 逻辑,导航到 ApplicationUser 标识表、角色和名为 project 的业务对象



我正在尝试获取角色类型为"Project_Manager"且未分配给我传入的项目 ID 的应用程序用户列表。 我尝试以几种不同的方式编写此内容,但结果不是我所期望的。 对我的逻辑有什么建议吗?

var pmNotAssigned = 
    (from p in db.Project
     from u in p.Users
     where p.ProjectId != projectId && 
         u.Roles.Any(r => r.RoleId == db.Roles.FirstOrDefault(rr => rr.Name == "Project_Manager").Id)
     select u)
    .ToList();

好的,我的猜测是您的项目之间存在一些用户重叠。 我假设您的数据看起来像这样:

  • 项目1
    • 用户1
    • 用户2
  • 项目2
    • 用户1
    • 用户3

使用此示例数据,如果将项目 ID 1 传递给方法,则当前查询将忽略 Project1,而不是项目 1 的所有用户。 所以它会返回用户 1 和用户 3,但你不需要用户 1。

试试这个:

var pmNotAssigned = 
    db.Users
    .Where(user =>
        // List of project's users does not contain this user.
        db.Project
            .First(p => p.ProjectId == projectId)
            .Users
            .All(projectUser => projectUser.Id != user.UserId) &&
        // List of this user's roles contains the 'Project_Manager' role.
        user.Roles
            .Any(r => r.RoleId == db.Roles.FirstOrDefault(rr => rr.Name == "Project_Manager").Id));

相关内容

  • 没有找到相关文章

最新更新