2009-01-25 4 views
1

J'ai une hiérarchie de base définie dans une table SQL:Comment obtenir un chemin de noeud complet avec LINQ to SQL?

Id ParentId Name 
---------------------- 
1  Null  Root 
2  1   Node1 
3  2   Node2 

est-il un bon moyen de LINQ-ish pour obtenir le chemin complet d'un nœud? Par exemple, je veux passer l'Id de Node2 et obtenir le chemin complet comme Root/Node1/Node2.

Merci d'avance :)

Répondre

2

Je ne peux pas penser à une façon de le faire en une seule requête pour un chemin de longueur arbitraire. J'aurais probablement recours à une boucle, en construisant le chemin au fur et à mesure, jusqu'à atteindre un nœud sans parent.

var node = db.Nodes.Where(n => n.Name == "Node2").SingleOrDefault(); 
string path = string.Empty; 
while (node != null) 
{ 
    path = string.Format("/{0}{1}", node.Name, path); 
    node = db.Nodes.Where(n => n.ParentId == node.Id).SingleOrDefault(); 
}