我有以下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的"临时表"绝对不放心。
此外,我试图转换它,但似乎不可能在LINQ内部创建一个WHERE
的连接子句(Linqer告诉我,Linqpad似乎无法在免费版本中从SQL转换到LINQ)
你能给我提示一下吗?
Thanks to lot
我想你正在寻找这样的东西。我省略了select子句,这样你就可以选择你需要的了。注意事项:
- 要连接多个列,请创建匿名类型。匿名类型中的字段名必须匹配。
- 创建
=NULL
条件,创建与另一个实体中的字段名匹配的变量名。将其设置为=null
,但将其强制为您将其设置为等于的字段的可空数据类型。
编辑:更新查询,移动where子句到join
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()