32

Linq to SQL で共通テーブル式 (CTE) (以下に示すような) を実行することは可能ですか? 私はCTEとLinq to SQLにかなり慣れていません。

私は現在ストアド プロシージャを無料で使用しています (ただし、決して反対ではありません) ので、完全に必要でない限り、1 つのクエリのためだけにストアド プロシージャに飛びつきたくありません。

これは、Linq to SQLでできるかどうか疑問に思っているSQLで行っていることの例です。

WITH TaskHierarchy (TaskID, [Subject], ParentID, HierarchyLevel, HierarchyPath) AS
(
   -- Base case
   SELECT
      TaskID,
      [Subject],
      ParentID,
      1 as HierarchyLevel,
      CONVERT(VARCHAR(MAX),'/') AS HierarchyPath
   FROM Task
   WHERE TaskID = 2

   UNION ALL

   -- Recursive step
   SELECT
      t.TaskID,
      t.Subject,
      t.ParentID,
      th.HierarchyLevel + 1 AS HierarchyLevel,
      CONVERT(varchar(MAX),th.HierarchyPath + CONVERT(VARCHAR(32),t.ParentID) + '/') AS HierarchyPath
   FROM Task t
      INNER JOIN TaskHierarchy th ON
         t.ParentID = th.TaskID
)

SELECT *
FROM TaskHierarchy
ORDER BY HierarchyLevel, [Subject]
4

1 に答える 1

20

AFAIK、これはオブジェクトモデルではサポートされていません。ただし、LINQはクエリを実行するメソッドをサポートしています(厳密にはDataContext.ExecuteQueryと呼ばれます)。これを使用して、SQLの任意の部分を呼び出し、それをLINQにマップして戻すことができるようです。SQLが埋め込まれているため、SQLが無料になることはありませんが、sprocを使用する必要はありません。

方法:SQLクエリを直接実行する(LINQ to SQL)

于 2009-02-25T05:55:07.977 に答える