2012-06-10 2 views
0
내가 LINQ 쿼리에 SQL 쿼리 아래에 변환 할

에 LINQ 쿼리에 가입하지만 난 혼란 : 오른쪽 외부 변환은 EF

SELECT * 
FROM dbo.Vahed 
INNER JOIN dbo.VahedMahsol ON dbo.Vahed.VahedId = dbo.VahedMahsol.VahedId 
RIGHT OUTER JOIN dbo.Mahsol ON dbo.VahedMahsol.MahsolId = dbo.Mahsol.MahsolId 

가이 코드 작성 :

vaheds = 
(
    from i in db.spGetVahedByWhatWhere(what, wherestr, int.Parse(whattype), new Guid(shahrid)) 
    join gr in db.GorohSenfis on i.GorohSenfiId equals gr.GorohSenfiID 
    join ct in db.Contacts on i.VahedId equals ct.VahedId 
    join vm in db.VahedMahsols on i.VahedId equals vm.VahedId 
    select i 
) 
.ToList(); 

을하지만 난하지 않습니다 변환 방법을 알고 있습니다.

RIGHT OUTER JOIN dbo.Mahsol ON dbo.VahedMahsol.MahsolId = dbo.Mahsol.MahsolId 

(linq 쿼리)

SELECT * 
FROM dbo.Mahsol 
LEFT OUTER JOIN dbo.VahedMahsol ON dbo.Mahsol.MahsolId = dbo.VahedMahsol.MahsolId 
INNER JOIN dbo.Vahed ON dbo.VahedMahsol.VahedId = dbo.Vahed.VahedId 

지금 위의 쿼리를 변환 할 수 있습니다 : 모든

답변

3

먼저 (이 LINQ로 변환하기 쉽기 때문에) 왼쪽 외부 조인 대신 RIGHT OUTER 조인을 사용하도록 SQL 쿼리를 다시 작성할 수 있습니다 다음과 같은 LINQ에서 :

vaheds = (
    from m in db.Mahsols 
    join vm1 in db.VahedMahsols on m.MahsolId equals v.MahsolId into vmgroup 
    from vm in vmgroup.DefaultIfEmpty() 
    join i in db.spGetVahedByWhatWhere(what, wherestr, int.Parse(whattype), new Guid(shahrid)) 
    on vm.VahedId equals i.VahedId 
    join gr in db.GorohSenfis on i.GorohSenfiId equals gr.GorohSenfiID 
    join ct in db.Contacts on i.VahedId equals ct.VahedId 
    select i 
).ToList(); 

나는 이것을 시험 할 방법이 없지만 그것이 효과가 있기를 바란다.

+0

나는 왼쪽 JOIN''로의 전환이 있어야한다고 생각 : 'dbo.Mahsol LEFT OUTER dbo.VahedMahsol INNER가 dbo.Mahsol.MahsolId ON dbo.VahedMahsol.VahedId = dbo.Vahed.VahedId ON dbo.Vahed 가입 가입 = dbo.VahedMahsol.MahsolId' –