如何将我的TSQL查询转换为LINQ

时间:2018-01-15 17:40:04

标签: linq tsql converter

我是linq的新手。我无法将此SQL代码转换为linq。请帮我。感谢。

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 as 
    structure , 
    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代码。

感谢。

1 个答案:

答案 0 :(得分:1)

将SQL转换为LINQ查询理解:

  1. li: b PHONE li +7 (914) 3164890 子选项翻译为单独声明的变量。
  2. 以LINQ子句顺序翻译每个子句,将monadic运算符(DISTINCT,TOP等)作为应用于整个LINQ查询的函数。
  3. 使用表别名作为范围变量。使用列别名作为匿名类型字段名称。
  4. 对多列使用匿名类型(new {})
  5. 使用into join_variable模拟左连接,然后从连接变量后跟.DefaultIfEmpty()进行另一次连接。
  6. 将COALESCE替换为条件运算符和空值测试。
  7. SELECT *必须替换为select range_variable或者连接,一个包含所有范围变量的匿名对象。
  8. SELECT字段必须替换为select new {...},创建一个包含所有所需字段或表达式的匿名对象。
  9. 必须使用扩展方法处理正确的FROM