Скажите, что у меня есть следующий CTE, который возвращает уровень некоторых данных дерева (модель смежности), которые у меня есть (взяты из Иерархические данные в Linq - параметры и производительность)
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
Мне было интересно, будет ли увеличение производительности за счет рекурсии в С# вместо SQL. Может ли кто-нибудь показать мне, как выполнять ту же работу, что и CTE, с рекурсивной функцией С#, предполагая, что у меня есть IQueryable, где Tree является сущностью, представляющей запись в иерархической таблице? Что-то вроде:
public void RecurseTree(IQueryable<Tree> tree, Guid userId, Guid parentId, int level)
{
...
currentNode.level = x
...
Recurse(tree... ,level + 1)
}
Было бы здорово видеть, что это легко сделать, используя выражение лямбда.