linq-to-sql common-table-expression

linq to sql - Expresión de tabla común(CTE) en linq-to-sql?



common-table-expression (1)

¿Es posible hacer expresiones de tabla comunes (CTE) (como se muestra a continuación) en Linq a SQL? Soy bastante nuevo en CTE, así como Linq para SQL.

Actualmente estoy almacenado en Proc. Gratis (pero no contra ellos de ninguna manera), así que no quiero dar el salto a los procesos almacenados solo para una consulta a menos que sea totalmente necesario.

Aquí hay un ejemplo de lo que estoy haciendo en SQL y me pregunto si puedo hacerlo en 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]


AFAIK, esto no es compatible con el modelo de objetos. Sin embargo, LINQ admite un método para ejecutar una consulta (lo suficientemente extraño como DataContext.ExecuteQuery). Parece que puedes usar eso para llamar a una pieza arbitraria de SQL y asignarlo de nuevo a LINQ. No estará libre de SQL debido al SQL incorporado, pero no tendrá que usar un sproc.

Cómo: Ejecutar Directamente Consultas SQL (LINQ to SQL)