0

我想将下面的 SQL 查询转换为 linq 查询,但我很困惑:

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 查询。

4

1 回答 1

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

我无法对此进行测试,但我希望它有效。

于 2012-06-10T17:32:05.803 回答