2009-02-25 4 views
26

Linq to SQL에서 공통 테이블 표현식 (CTE) (아래 참조)을 수행 할 수 있습니까? 나는 SQL에 Linq뿐만 아니라 CTE의 새로운 기능을 잘 알고있다.linq-to-sql의 공통 테이블 식 (CTE)?

저는 현재 Proc 무료로 저장되어 있습니다 (그러나 어떤 방식 으로든 반대하지 않습니다). 완전히 필요한 경우가 아니라면 하나의 쿼리에 대해 저장된 procs로 도약하지 않으려합니다.

가 여기에 내가 SQL에 Linq에의 할 수 있을지 궁금하네요 내가 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)