检索未处理特定项目 LINQ ASP.NET MVC 5 的用户(具有某些角色)



我正在尝试检索(初级开发人员或团队负责人)并且未在操作参数中使用给定 id 处理某个项目的用户。

我正在使用 ASP.NET 身份来存储用户

这是我在操作中使用的视图模型。

分配的项目视图模型

public class AssignedProjectViewModel
{
public ApplicationUser User { get; set; }
public Works_on Works_on { get; set; }
public Project Project { get; set; }
}

在下面的操作中。usersinRole检索初级开发人员和团队负责人用户的 ID 列表。这工作正常。

然后我尝试寻找具有指定角色(初级开发人员和团队负责人)并且没有使用给定ID处理某个项目

的用户搜索和JD操作

public ActionResult SearchTLandJD(int projectid)
{
var usersinRole = context.Users.Where(u => u.Roles.Any(r => r.RoleId.Equals("d8bff653-2a05-4159-948d-6eabd17de838") || r.RoleId.Equals("3b12d84f-0ecc-4e04-8e9c-ff3d441e2ce0"))).Select(u => u.Id).ToList();
var searchquery = from p in DBcontext.Projects
join work in DBcontext.Works_on on p.Id equals work.ProjectId
join member in DBcontext.Users on work.UserId equals member.Id
where !(from w in context.Works_on
where w.ProjectId == projectid
select w.UserId).Contains(member.Id) && usersinRole.Contains(member.Id)
select new AssignedProjectViewModel
{
Project = p,
Works_on = work,
User = member
};

var users = searchquery.ToList();
return View(users);
}

我该如何实现呢?提前感谢!

首先,对角色 ID 进行硬编码是一个非常糟糕的主意。首先选择要使用的角色:

var roleIds = db.Roles.Where(m => m.Name == "Junior developers" || m.Name == "Team Leaders").Select(m => m.Id);

然后,您可以获取用户:

var users = db.Users.Where(u =>
u.Roles.Any(r => roleIds.Contains(r.RoleId)) && 
!u.Works_on.Any(w => w.ProjectId == projectId));

最新更新