2009-02-25 39 views
26

Có thể thực hiện các biểu thức bảng chung (CTE) (như được hiển thị bên dưới) trong LINQ to SQL hay không. Tôi khá mới với CTE cũng như LINQ to SQL.Biểu thức bảng chung (CTE) trong linq-to-sql?

Tôi hiện đang lưu trữ Proc miễn phí (nhưng không chống lại chúng bằng bất kỳ phương tiện nào) vì vậy tôi không muốn thực hiện bước nhảy vọt để lưu trữ procs chỉ cho một truy vấn trừ khi nó hoàn toàn cần thiết.

Dưới đây là một ví dụ về những gì tôi đang làm trong SQL mà tôi đang tự hỏi nếu tôi có thể làm trong LINQ to 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] 

Trả lời

17

AFAIK, điều này không được hỗ trợ bởi mô hình đối tượng. Tuy nhiên, LINQ hỗ trợ một phương thức để thực hiện một truy vấn (đủ kỳ lạ gọi là DataContext.ExecuteQuery). Có vẻ như bạn có thể sử dụng nó để gọi một đoạn SQL tùy ý và ánh xạ nó trở lại LINQ. Bạn sẽ không được SQL miễn phí vì SQL nhúng, nhưng bạn sẽ không phải sử dụng một sproc.

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

Các vấn đề liên quan