将SQL查询转换为LINQ查询

时间:2014-06-24 15:27:55

标签: sql sql-server linq sql-to-linq-conversion

我有以下SQL查询

SELECT *
FROM LOC l
JOIN CLA c ON l.IdLoc = c.IdLoc
JOIN FA f on c.IdCla = f.IdCla
LEFT JOIN CON co ON f.IdCla = co.IdCla
    AND co.DeletedDate IS NULL
    AND co.IdUser = f.IdUser
WHERE f.IdUser = 7
    AND f.DeletedDate IS NULL

我想将其转换为LINQ,但我绝对不会轻易使用LINQ的LEFT JOIN和“临时表”。

此外,我试图转换它,但似乎无法在LINQ中创建一个WHERE内部的连接子句(Linqer告诉我并且Linqpad似乎没有能够在免费版本中从SQL转换为LINQ)

你能告诉我线索吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找这样的东西。我遗漏了select子句,这样你就可以得到你需要的东西。注意事项:

  • 要加入多个列,请创建匿名类型。匿名类型中的字段名称必须匹配。
  • 要创建=NULL条件,请创建与另一个实体中的字段名称匹配的变量名称。将其设置为=null,但将其强制为您设置的字段的可空数据类型。

编辑:更新了查询以将where子句移动到连接

from l in LOC
join c in CLA
   on l.IdLoc equals c.IdLoc
join f in FA
   on new     { c.IdCla, IdUser = 7, DeletedDate = (DateTime?)null }
   equals new { f.IdCla, f.IdUser, f.DeletedDate }
join co in CON
   on new     { f.IdCla, DeletedDate = (DateTime?)null, f.IdUser }
   equals new { co.IdCla, co.DeletedDate, co.IdUser } into lj
from l in lj.DefaultIfEmpty()