Bonjour.

Je cherche à remplir un arbre de nœuds où un nœud représente un fichier ou un dossier.

J'ai donc les modèles suivants, simplifiés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Node {
[Key]
int Id { get; set; }
 
string Path { get; set; }
 
NodeType Type { get; set; }
 
Node Parent { get; set; }
 
[NotMapped]
ICollection<Node> Children { get; set; }
 
//d'autres infos
}
 
class NodeType {
[Key]
int Id { get; set; }
 
string Type { get; set; } //"folder" ou "file"
 
//d'autres infos
}
où la table NodeType n'a que deux lignes folder et file.

J'accède aux données comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
//Prepare the query to filter nodes
var query = (from n in context.Nodes
    join nt in context.NodeTypes on n.NodeType equals nt
    where n.Project.Id == CurrentProject.Id
    orderby n.NodeType.Id
    select n);
    //select new { n.Id, n.Children, n.Parent, n.Path, n.NodeType };
 
//Remplir le champ Children
query.ForEachAsync( n=>n.Children = query.Where(nn => nn.Parent.Id.Equals(n.Id)).ToList() ).Wait();
 
var Nodes = query.ToList(); //me retourne un List<Node> dont les NodeType ne sont pas renseignés
L'arbre (un TreeView en WPF) est affiché correctement, mais je ne peux pas savoir si le nœud est un dossier ou un fichier, car le champ Nodes[n].NodeType est vide.

Donc ma question est comment accéder à ce champ ?

J'ai vu qu'on peut sélectionner plusieurs éléments avec la syntaxe select new {n.Id, n.Children, ...}, mais quand je remplis le champ Children j'obtiens une erreur
CS1061 'object' does not contain a definition for 'Children' and no extension method 'Children' accepting a first argument of type 'object' could be found
Comment faire ?