說具有以下CTE返回,我已經(從Hierarchical data in Linq - options and performance拍攝)一些樹數據(鄰接模型)的水平:模擬CTE遞歸在C#
WITH hierarchy_cte(id, parent_id, data, lvl) AS
(
SELECT id, parent_id, data, 0 AS lvl
FROM dbo.hierarchical_table
WHERE (parent_id IS NULL)
UNION ALL
SELECT t1.id, t1.parent_id, t1.data, h.lvl + 1 AS lvl
FROM dbo.hierarchical_table AS t1
INNER JOIN hierarchy_cte AS h ON t1.parent_id = h.id
)
SELECT id, parent_id, data, lvl
FROM hierarchy_cte AS result
我想知道是否會有任何通過在C#中執行遞歸而不是SQL來提高性能。任何人都可以告訴我如何執行CTE用遞歸C#函數執行的相同工作,假設我有一個IQueryable,其中Tree是表示分層表中的條目的實體?一些沿線:
public void RecurseTree(IQueryable<Tree> tree, Guid userId, Guid parentId, int level)
{
...
currentNode.level = x
...
Recurse(tree... ,level + 1)
}
看到這很容易做到使用lambda表達式很酷。
像一個魅力工作。所需時間從3秒縮短到<1。謝謝:) – woggles 2011-06-03 10:25:42