2014-04-28 4 views
0

나는 두 모델 많은 관계로 많은 구성되어 있는지 아래와 같이있다 : 나는 Linq를 가진 Inner Join을 수행 할내부는 많은 관계 모델에 많은 사이에 가입

public class Permission 
{ 
    public int PermissionId { get; set; } 
    public string PermissionName { get; set; } 
    public virtual List<Role> Roles { get; set; } 
} 


public class Role 
{ 
    public int RoleId { get; set; } 
    public string Name { get; set; } 
    public string ID { get; set; } 
    public virtual List<Permission> Permissions { get; set; } 
} 

. 조인 테이블이 존재하기 때문에 SQL로 쉽게 할 수 있습니다. 하지만 어떻게 linq이 할 수 있습니까? 아래는 지금까지 무엇을 할 수 있는지입니다 :

from pr in Permissions 
    join role in Roles on pr.Roles.Select(s => s.RoleId).FirstOrDefault() equals role.RoleId 
select new { pr.PermissionName, role.RoleId } 

당신이 결과지만 오류없이 쿼리를 컴파일 얻을 수없는 그 이외의 파멸 할 FirstOrDefault 위에서 볼 수 있듯이. 내부 따라서 쿼리가 어떤 도움에 감사드립니다 예상

로 작동 조인 테이블로 만든 조인,

SELECT P.PermissionName, R.RoleId 
    FROM Permissions AS P 
     INNER JOIN PermissionRoles AS PR ON P.PermissionId = PR.Permission_PermissionId 
     INNER JOIN Roles AS R ON PR.Role_RoleId = R.RoleId 

당신이 볼 수 있듯이 : 아래

내가 Linq에에 쓰기를 시도하고있는 쿼리입니다 .

답변

1

가장 쉬운 구문은

from p in context.Permissions 
from r in p.Roles // notice the p ! 
select new { p.PermissionName, r.RoleId, Role = r.Name, etc... } 

는 EF 필요한 내부 조인과 SQL을 생산할 예정이다.

유창 상응하는 당신은 아마 첫 번째 양식, "포괄적 인 구문은"승리에 동의합니다

Products.SelectMany(p => p.Roles, 
        (p, r) => new 
           { 
           p.PermissionName, 
           r.RoleId, 
           ... 
           }) 

입니다.

+0

감사! 린크를 잘 읽으려는거야? – lbrahim

+1

그냥 MSDN 워드 프로세서와 그것을 많이하고 :) –

0
var x = from pr in Permissions 
     from role in Roles 
     where pr.Roles.Exists(r => r.RoleId == role.RoleId) 
     select new { pr.PermissionName, role.RoleId };