2016-06-15 2 views
0

그래서 현재 로그인 한 사용자의 userID로 모듈 개체 목록을 필터링하려고합니다. 그 후 내가 선택한 객체의 moduleID를 가져 오려고합니다.linq 쿼리를 사용하여 속성 값이 목록의 값과 일치하는 개체 선택

이전에 얻은 moduleID 목록 중 하나와 일치하는 moduleID가 포함 된 보고서 목록 만 필터링하려고합니다.

내가 LINQ에 그 특히 지식이 아니에요이 내가이 명령문에 메서드가 포함 된 통합하려고 마지막 부분에 문제가있어

var name = User.Identity.GetUserName(); 
     ApplicationUser currentUser = (ApplicationUser)db.Users.Single(x => x.UserName == name); //gets the currently logged in user 
     var modules = (from i in db.Modules 
         where i.User == currentUser 
         select i.ModuleID); //gets moduleID's for modules owned by current user 
     var Reports = from u in db.Reports 
         where u.moduleID == modules 
         select u; 

해낸 것입니다.

도움을 주시면 감사하겠습니다.

+0

답장을 보내 주시면 감사하겠습니다. –

답변

0

당신은 하나에 여러 쿼리를 단순화 수 :

var name = User.Identity.GetUserName(); 
var reports = from r in db.Reports 
       join m in db.Modules on r.moduleID equals m.ModuleID 
       where m.User.UserName == name 
       select r; 
0

intIEnumerable<int>을 비교할 수 없습니다. moduleID이 같은 modules 내에서 발견되는 경우 확인할 수 있습니다 : 당신이 올바른 궤도에있어

where modules.Contains(u.moduleID) 
0

합니다.

var Reports = from u in db.Reports 
       where modules.Contains(u.moduleID) 
       select u; 

또는 사용하는 람다 : 내가 제대로 테이블 구조를 추론하고있어 경우

var reports = db.Reports.Where(u => modules.Contains(u)); 
0

당신이 가까이있어. Linq에서 표준 SQL에서 약간 뒤로. 그 경우 당신은 보고서의 모듈 ID가 모듈 목록에 포함되어 있는지 확인하려면, 그래서 그 결과는 다음과 같습니다 당신이 직접 할 수있는 많은 관계로 하나가있는 경우

var Reports = from u in db.Reports 
       where modules.Contains(u.moduleID) 
       select u; 
0

탐색 속성을 사용 Where 절에 :

var name = User.Identity.GetUserName(); 
var Reports = db.Reports.Where(x => x.Module.User.Name == name); 
관련 문제