2017-05-09 1 views
0

(주니어 개발자 또는 팀 리더)이며 주어진 프로젝트로 작업하지 않는 사용자를 검색하려고합니다. 액션 매개 변수의 id.특정 프로젝트에서 작동하지 않는 특정 역할을 가진 사용자 가져 오기 LINQ ASP.NET MVC 5

i는 사용자

이 내가 작업에 사용하고 뷰 모델을 저장하는 ASP.NET 정체성을 사용하고 있습니다.

아래 액션

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

AssignedProjectViewModel. usersinRole은 주니어 개발자 인 사용자의 ID 목록 & 팀 리더를 검색합니다. 이것은 잘 작동합니다. 그런 다음

내가 지정된 역할 (주니어 개발자 및 팀 리더)로하며, 지정된 ID와 특정 프로젝트에 참여하지 않은 사용자를 찾기 위해 노력하고

SearchTLandJD 액션

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); 
    } 

어떻게해야합니까? 미리 감사드립니다!

답변

0

첫째, 역할 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)); 
+0

가 대단히 감사합니다! :디 –

관련 문제