2017-11-21 21 views
0

私はtsqlクエリを持っています。それはうまく動作します。私は、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, 
     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 

感謝の

+0

あなたは何を試みましたか? –

答えて

0

私はあなたのSQLでの再帰CTEを使用している気付きませんでした。残念ながら、再帰的なCTEの良い直接変換はありません。推奨されるアプローチは、再帰SQLに基づいてストアドプロシージャまたはビューを作成し、それにアクセスすることです。 LINQにSQLを変換するため

  1. 別々の変数
  2. が機能全体LINQクエリに適用される(DISTINCTTOPなど)単項演算子を残し、LINQ句のために、各句を翻訳ように副選択を翻訳。
  3. テーブルエイリアスを範囲変数として使用します。列の別名は、匿名の型フィールド名として使用します。
  4. 左が参加し、複数の列の
  5. 使用匿名型(new { })は、可変結合を使用して.DefaultIfEmpty()続い参加変数から別のfromを行うことによってシミュレートされます。
  6. ​​3210を条件演算子とヌルテストに置き換えます。
  7. UNION ALLの場合はConcatUNIONの場合はUnionを使用してください。
+0

できません。助けてください – user3425037

+0

あなたはそれを変換する方法を表示することはできますか? – user3425037