IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

Récupérer les données d'une jointure [Débutant]


Sujet :

Entity Framework

  1. #1
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut Récupérer les données d'une jointure
    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 ?
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    J'ai trouvé ce qui n'allait pas, il fallait simplement passer par une syntaxe différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var query = context.Nodes.Where( n=>n.Project.Id == CurrentProject.Id ).Include( n=>n.NodeType ).OrderBy(n=>n.NodeType.Id);
    Et là le champ NodeType est bien rempli.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] récupérer les données d'une jointure: symfony
    Par marwina32 dans le forum Symfony
    Réponses: 35
    Dernier message: 10/09/2010, 12h35
  2. [1.x] Récupérer les données d'une jointure
    Par d10g3n dans le forum Symfony
    Réponses: 8
    Dernier message: 20/02/2010, 23h58
  3. Réponses: 15
    Dernier message: 20/06/2006, 10h29
  4. Récupérer les données après une recherche
    Par cdumas dans le forum Access
    Réponses: 7
    Dernier message: 04/05/2006, 12h09
  5. Récupérer les données d'une iframe
    Par juli1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 22h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo