J'ai le temps le plus difficile à convertir une liste (de dossier) en hiérarchie. 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> i obtenir une liste des trois dossiers: p> devrait ressembler à: p> Root
--Child
----Grand Child
3 Réponses :
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 });
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()
Une belle utilisation de l'extension Tolookup.
Essayez cette méthode d'extension:
list.AsHierarchy(x => x.Parent, x => x.Children);
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.