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

Linq Discussion :

Aide sur une requête LINQ avec left outer join


Sujet :

Linq

  1. #1
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut Aide sur une requête LINQ avec left outer join
    Bonjour,

    voici la structure de ma bdd :
    T_MENU (code, level1, level2, label)

    T_MENU_ITEM(id, menu_code, libelle)

    j'ai créée la structure de données suivantes
    ItemDto (id, libelle)
    MenuDto (code, level1, level2, label, listeItem = List<ItemDto>)

    Je cherche en une requête à remplir ma liste de MenuDto avec toutes les informations

    je suis donc parti sur une requête LINQ du style (au départ que les menus)

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    using (Carto_Entities bdd = new Carto_Entities())
             {
                var requete = from menu in bdd.T_Ref_Structure_Menu
                              select new MenuDto
                              {
                                 Code= menu.code,
                                 Label= menu.Label,
                                 Level1 = menu.Level1,
                                 Level2 = menu.Level2
                              };
     
                list = requete.ToList();
             }

    Jusqu'ici tout se passe bien. Je veux donc inclure désormais mes items.
    Je fais donc un join

    Code C# : 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
    using (Carto_Entities bdd = new Carto_Entities())
             {
                var requete = from menu in bdd.T_Ref_Structure_Menu
    join item in bdd.T_Ref_Item_Menu on menu.Code equals item.menu_code
                              select new MenuDto
                              {
                                 Code= menu.code,
                                 Label= menu.Label,
                                 Level1 = menu.Level1,
                                 Level2 = menu.Level2,
                                 ListItem = ???
                              };
    
                list = requete.ToList();
             }

    Je ne vois pas comment remplir ma liste.

    Auriez-vous une piste ?

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Bonjour,

    Pourquoi tu n'utilises pas directement tes DTO's pour faire le mapping ?

    Je supposes que t'utilises Entity Framework et avec un peu de chance EF 4 ? Donc tu peux utiliser les poco's.

  3. #3
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Je n'utilise pas directement mes dto car ici on tombe sur du 1-1 en terme de champ mais j'ai des dto qui regroupent plusieurs infos de plusieurs tables.

    J'utilise bien EF4 mais je débute sur le sujet donc je ne suis pas au point

    J'ai aussi un brin simplifié ma requête car il y a des where sur le menu et des order by

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Je n'utilise pas directement mes dto car ici on tombe sur du 1-1 en terme de champ mais j'ai des dto qui regroupent plusieurs infos de plusieurs tables.
    Pas tout compris... Avec l'edmx tu peux préciser qu'un objet contient des infos de plusieurs tables...

    Voir les différents scénarios de mapping :

    http://msdn.microsoft.com/en-us/library/cc716779.aspx

    Sinon tu peux le faire comme ça en utilisant menu.T_Ref_Item_Menu avec un Select, mais j'imagine pas le résultat ça risque de créer un monstre loll.

    En tout cas je ne vois pas l'intérêt ici de travailler avec des DTO's... Mais c'est à toi de voir

  5. #5
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Je ne sais pas si j'ai tout compris mais j'aimerais utiliser des DTO car je travailles en couche. Mes DTO me permettent de passer de la couche données (où ils sont remplis), à ma couche service (où ils peuvent être retravaillé) à ma couche présentation où ils sont affichés.

    Je vais néanmoins lire ton lien.
    Merci

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Bonjour, je ne connais pas votre modèle de données mais pensez aussi aux VUES (SQL) qui sont la pour 'masquer' la modélisation pas toujours calquée sur la logique objet...

Discussions similaires

  1. Besoin d'aide sur une requête avec un MAX()
    Par lcristin dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/03/2013, 14h57
  2. Linq to XML => Aide sur une requête
    Par scharly3 dans le forum Linq
    Réponses: 6
    Dernier message: 25/03/2011, 14h41
  3. Besoin aide sur une requête avec jointure
    Par PoichOU dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/08/2010, 18h32
  4. Aide sur une requête avec jointure..
    Par WeDgEMasTeR dans le forum Requêtes
    Réponses: 7
    Dernier message: 10/11/2009, 18h09
  5. Je recherche de l'aide sur une requête avec dates
    Par Alain CARDINI dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/05/2008, 22h11

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