2012-06-10 37 views
0

我想下面的SQL查詢轉換爲LINQ查詢,但我困惑:轉換右外連接的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查詢。

回答

3

,首先你可以重寫你的SQL查詢使用LEFT OUTER JOIN代替RIGHT OUTER JOIN(因爲這是比較容易轉換爲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 

現在可以將查詢轉換以上在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

我想轉換爲'LEFT JOIN'應該是:'dbo.Mahsol LEFT OUTER JOIN dbo.VahedMahsol INNER JOIN dbo.Vahed ON dbo.VahedMahsol.VahedId = dbo.Vahed.VahedId ON dbo.Mahsol.MahsolId = dbo.VahedMahsol.MahsolId' –