【问题标题】:Convert a SQL query to LINQ query将 SQL 查询转换为 LINQ 查询
【发布时间】:2014-08-14 22:47:53
【问题描述】:

我有以下 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 免费版)

你能给我线索吗?

非常感谢

【问题讨论】:

  • Linqpad 不会将 SQL 转换为 LINQ,即使在付费版本中也是如此。您是否开始使用 Lambda 语法?或者 sql/query 语法会好吗?
  • 我想要一个LINQ查询语法,我比较懂

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


【解决方案1】:

我认为您正在寻找这样的东西。我省略了 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()

【讨论】:

  • 你的答案几乎是完美的,我赞成!但是,您的 LINQ 请求会返回正确的 FA,并且对于返回的每个 FA,用户 7 的相应 CON(这很好),还有与此 FA 相关联但 CON.IdUser != 7 的 CON。如果我不是完全清楚(对不起我的英语),我有很好的 FA,链接到这些 FA 的 CON,还有链接到这些 FA 的其他用户的 CON(在这个例子中,我只想要链接到用户 7 的 CON)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2017-02-23
  • 2020-07-19
相关资源
最近更新 更多