【问题标题】:how to convert child - parent sql query to linq or lambda expression如何将子父 sql 查询转换为 linq 或 lambda 表达式
【发布时间】:2017-11-21 22:12:10
【问题描述】:

我有 tsql 查询。它工作正常。我想将其转换为 linq 查询或 lambda 表达式

DECLARE @myHID BIGINT;
SET @myHID = 1;

WITH tblChild AS
(
    SELECT *
        FROM wbs.WBS w WHERE w.ParentId = @myHID
    UNION ALL
    SELECT w2.* FROM wbs.WBS w2  JOIN tblChild  ON w2.ParentId = 
    tblChild.hID
    )
    SELECT 
        tblChild.hID, Unit.ID, w3.wbsName + ' * ' + tblChild.wbsName, 
        tblChild.FK_WbsBaseStructure_hID, tblChild.parentID, unitNumber, 
        unitTitle, FK_UsageItem_ID, usageTitle, nominalArea
   FROM tblChild
  inner join unit.Unit on tblChild.hID = Unit.FK_WBS_hID
  inner join unit.UsageItem on Unit.FK_UsageItem_ID = UsageItem.ID
  left join wbs.WBS w3 on tblChild.parentID = w3.hID

谢谢

【问题讨论】:

  • 你尝试了什么?

标签: linq lambda qsqlquery


【解决方案1】:

我没有注意到您在 SQL 中使用了递归 CTE。不幸的是,递归 CTE 没有很好的直接翻译。推荐的方法是基于递归 SQL 创建存储过程或视图并对其进行访问。

用于将 SQL 转换为 LINQ,

  1. 将子选择转换为单独的变量
  2. 按 LINQ 子句顺序翻译每个子句,将单子运算符(DISTINCTTOP 等)作为应用于整个 LINQ 查询的函数。
  3. 使用表别名作为范围变量。使用列别名作为匿名类型字段名称。
  4. 对多个列使用匿名类型 (new { })
  5. 通过使用一个连接变量并从连接变量执行另一个from 后跟.DefaultIfEmpty() 来模拟左连接。
  6. coalesce 替换为条件运算符和空测试。
  7. Concat 用于UNION ALL,将Union 用于UNION

【讨论】:

  • 我做不到。请帮帮我
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多