8
votes

Liste plate à la hiérarchie

J'ai le temps le plus difficile à convertir une liste (de dossier) en hiérarchie. XXX PRE>

Je dois retourner la liste (du dossier) avec les enfants peuplés. P> Je construis une liste (de dossier) à partir des données de la base de données. p>

{1, "dossier 1", rien} {2, "Dossier 2", 1} {3, "Dossier 3", 2} {4, "Dossier 4", 3} {5, "Dossier 5", rien} p>

Je ne peux pas comprendre comment déplacer récursivement les dossiers enfants dans la propriété des enfants de leur parent. p>

Je voudrais faire cela avec Linq. P>

Toute aide est grandement appréciée. P>

MISE À JOUR PART> P> P > Merci pour votre réponse, mais pas tout à fait là-bas. Basé sur votre réponse, je suis venu avec cela qui fonctionne presque. p> xxx pré>

i obtenir une liste des trois dossiers: p> xxx pré>

devrait ressembler à: p>

Root
--Child
----Grand Child


0 commentaires

3 Réponses :


0
votes

Version C #

var newList = list.Select(o=> 
   new Fodler
   { 
        FodlerID = o.FodlerID,
        Children = list.Where(q => q.ParentId == o.FodlerID),
        Parent = list.FirstOrDefault(q => q.FodlerID == o.ParentID ),
        //Other properties goes here
   });


0 commentaires

14
votes

C'est facile si vous utilisez la méthode de l'extension code> TolOookUp CODE>.

C #: P>

Dim lookup = folderList.ToLookup(Function (f) f.ParentFolderID)

For Each folder In folderList
    folder.Children = lookup(folder.FolderID).ToList()
Next

Dim rootFolders = lookup(Nothing).ToList()


1 commentaires

Une belle utilisation de l'extension Tolookup.



0
votes

Essayez cette méthode d'extension:

list.AsHierarchy(x => x.Parent, x => x.Children);


2 commentaires

Salut. Cet extrait semble très intéressant pour moi, mais comment l'invoquer? Je ne comprends pas le x => x.parent? Quelqu'un peut-il donner un exemple pour me signaler dans la bonne direction?


Vous devez créer la méthode d'extension ci-dessus dans une classe statique pour l'utiliser. Le premier paramètre spécifie comment trouver le nœud parent et le deuxième paramètre comment obtenir la collection d'enfants.