【问题标题】:Common Table Expression (CTE) in linq-to-sql?linq-to-sql 中的公用表表达式(CTE)?
【发布时间】:2009-02-25 05:44:37
【问题描述】:

是否可以在 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]

【问题讨论】:

    标签: linq-to-sql common-table-expression


    【解决方案1】:

    AFAIK,对象模型不支持此功能。但是,LINQ 支持执行查询的方法(很奇怪,称为 DataContext.ExecuteQuery)。看起来您可以使用它来调用任意一段 SQL 并将其映射回 LINQ。由于嵌入式 SQL,您不会免费使用 SQL,但您不必使用存储过程。

    How to: Directly Execute SQL Queries (LINQ to SQL)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多