我正在尝试获取角色类型为"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));