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

¿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.

Actualmente soy Stored Proc gratuito (pero no estoy en contra de 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 que me pregunto si puedo hacer en SQL 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] 

AFAIK, esto no es compatible con el modelo de objetos. Sin embargo, LINQ admite un método para ejecutar una consulta (lo suficientemente esgulps 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.

Cómo: Ejecutar directamente consultas SQL (LINQ to SQL)