1

我有以下 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但我绝对不放心LEFT JOIN使用 LINQ 和“临时表”。

WHERE此外,我尝试对其进行转换,但似乎不可能在 LINQ中创建带有内部的连接子句( Linqer告诉我,并且Linqpad似乎无法在免费版本中从 SQL 转换为 LINQ)

你能给我线索吗?

非常感谢

4

1 回答 1

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()
于 2014-06-24T21:53:32.923 回答