2009-02-25 48 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)