decir que tienen el CTE siguiente que devuelve el nivel de algunos datos de árbol (modelo de adyacencia) que he (tomado de Hierarchical data in Linq - options and performance):Simulación de recursividad CTE en 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
Me preguntaba si habría alguna el rendimiento aumenta al hacer la recursión en C# en lugar de SQL. ¿Alguien puede mostrarme cómo realizar el mismo trabajo que hace el CTE con una función C# recursiva suponiendo que tengo un IQueryable donde Tree es una entidad que representa una entrada en la tabla jerárquica? Algo similar a:
public void RecurseTree(IQueryable<Tree> tree, Guid userId, Guid parentId, int level)
{
...
currentNode.level = x
...
Recurse(tree... ,level + 1)
}
Sería genial ver que esto es fácil de hacer usando una expresión lambda.
funcionó como un encanto. el tiempo empleado ha bajado de 3 segundos a <1. Gracias :) – woggles