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

統合言語クエリへ。

4

1 に答える 1

3

まず、RIGHT OUTER JOIN の代わりに LEFT OUTER JOIN を使用するように SQL クエリを書き直すことができます (これは 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 に答える