Общее выражение таблицы (CTE) в linq-to-sql?
Можно ли использовать общие табличные выражения (CTE) (как показано ниже) в Linq to SQL. Я новичок в CTE, а также Linq to SQL.
В настоящее время я сохранен в 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]
Ответы
Ответ 1
AFAIK, это не поддерживается объектной моделью. Однако LINQ поддерживает метод выполнения запроса (как ни странно, так называемый DataContext.ExecuteQuery). Похоже, вы можете использовать это, чтобы вызвать произвольный кусок SQL и перевести его обратно в LINQ. Вы не будете свободны от SQL из-за встроенного SQL, но вам не придется использовать sproc.
Практическое руководство. Выполнение SQL-запросов (LINQ to SQL)