2009-02-25 21 views
26

¿Es posible hacer expresiones de tabla comunes (CTE) (como se muestra a continuación) en Linq a SQL. Soy bastante nuevo en CTE y también en Linq en SQL.Expresión de tabla común (CTE) en linq-to-sql?

Actualmente soy Stored Proc gratuito (pero no en su contra de ninguna manera) así que no quiero dar el salto a los procesos almacenados solo para una consulta a menos que sea totalmente necesario.

He aquí un ejemplo de lo que estoy haciendo en SQL que me pregunto si puedo hacerlo en LINQ a 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] 

Respuesta

17

yo sepa, esto no es compatible con el modelo de objetos. Sin embargo, LINQ admite un método para ejecutar una consulta (lo suficientemente estragos como DataContext.ExecuteQuery). Parece que puede usar eso para llamar a una parte arbitraria de SQL y asignarla de nuevo a LINQ. No tendrá SQL libre debido al SQL incorporado, pero no tendrá que usar un sproc.

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

Cuestiones relacionadas