linq-to-sql中的公共表达式(CTE)是什么?

32

在 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]
1个回答

20
据我所知,对象模型不支持此功能。然而,LINQ支持一种执行查询的方法(奇怪地称为DataContext.ExecuteQuery)。看起来你可以使用它来调用任意的SQL语句并将其映射回LINQ。由于内嵌的SQL语句,你无法完全摆脱SQL,但你不必使用存储过程。
如需详细了解,请参阅 How to: Directly Execute SQL Queries (LINQ to SQL)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接