LINQ逻辑,导航到ApplicationUser标识表、角色和名为project的业务对象
我正在尝试获取角色类型为“Project\u Manager”且未分配给我传入的projectd的应用程序用户列表。我试着用几种不同的方式写这篇文章,但结果并不是我所期望的。对我的逻辑有什么建议吗LINQ逻辑,导航到ApplicationUser标识表、角色和名为project的业务对象,linq,entity-framework-6,asp.net-identity,Linq,Entity Framework 6,Asp.net Identity,我正在尝试获取角色类型为“Project\u Manager”且未分配给我传入的projectd的应用程序用户列表。我试着用几种不同的方式写这篇文章,但结果并不是我所期望的。对我的逻辑有什么建议吗 var pmNotAssigned = (from p in db.Project from u in p.Users where p.ProjectId != projectId && u.Roles.Any(r => r.Ro
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
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));
没有什么东西会立刻向我扑来。它返回一个具有“项目经理”角色但“!=”的用户列表where子句不起作用。我有一个分配给项目的pm用户列表,我希望有一个未分配的用户列表,以便我可以将他们添加到multiselect。现在,我有两张PM的名单。这两个查询之间的唯一区别是“!=”vs'=='。是“!”吗在错误的位置?它在“.First”发出尖叫,因此我尝试了First或default,但没有产生结果:(如果没有更多信息,很难说问题可能是什么。你是否得到异常?如果是,是什么。