是否可以在Linq to SQL中执行公用表表达式(CTE)(如下所示)。我对CTE和Linq to SQL都很陌生。
我目前正在免费存储过程(但不能以任何方式对抗它们)所以我不想仅仅针对一个查询进行存储过程的跳跃,除非它是完全必要的。
以下是我在SQL中所做的一个示例,我想知道我是否可以在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]
答案 0 :(得分:19)
AFAIK,对象模型不支持此功能。但是,LINQ支持一种执行查询的方法(足够严格地称为DataContext.ExecuteQuery)。看起来你可以使用它来调用任意一段SQL并将其映射回LINQ。由于嵌入式SQL,您将不再是SQL,但您不必使用sproc。