2009-02-25 90 views
26

是否有可能在Linq to SQL中執行公用表表達式(CTE)(如下所示)。我對CTE和Linq to SQL都很陌生。linq-to-sql中的公用表表達式(CTE)?

我目前存儲過程免費(但不是以任何方式反對他們),所以我不想爲一個查詢跳過存儲過程,除非它是完全必要的。

下面是我想知道如果我可以做的LINQ到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] 

回答

17

AFAIK,這不是由對象模型支持。但是,LINQ支持一種執行查詢的方法(足夠簡潔,稱爲DataContext.ExecuteQuery)。看起來你可以使用它來調用任意一段SQL並將其映射回LINQ。由於嵌入式SQL,您將不會獲得SQL,但您不必使用sproc。

How to: Directly Execute SQL Queries (LINQ to SQL)