Précédent   Forum des professionnels en informatique > Dotnet > Accès aux données > Linq
Linq Forum d'entraide sur la manipulation de données avec Linq
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2011, 17h08   #1
Membre Expert
 
Avatar de jbrasselet
 
Homme Julien Brasselet
Ingénieur développement logiciels
Inscription : mars 2006
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme Julien Brasselet
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2006
Messages : 952
Points : 1 382
Points : 1 382
Envoyer un message via MSN à jbrasselet
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# :
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# :
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
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
jbrasselet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 17h19   #2
Membre Expert
 
Inscription : octobre 2005
Messages : 1 369
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2005
Messages : 1 369
Points : 1 697
Points : 1 697
Envoyer un message via MSN à rad_hass
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.
__________________
Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

Twitter Blog Mon site

Mon article sur l'agilité
rad_hass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 17h24   #3
Membre Expert
 
Avatar de jbrasselet
 
Homme Julien Brasselet
Ingénieur développement logiciels
Inscription : mars 2006
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme Julien Brasselet
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2006
Messages : 952
Points : 1 382
Points : 1 382
Envoyer un message via MSN à jbrasselet
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
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
jbrasselet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 17h38   #4
Membre Expert
 
Inscription : octobre 2005
Messages : 1 369
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2005
Messages : 1 369
Points : 1 697
Points : 1 697
Envoyer un message via MSN à rad_hass
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
__________________
Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

Twitter Blog Mon site

Mon article sur l'agilité
rad_hass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 08h33   #5
Membre Expert
 
Avatar de jbrasselet
 
Homme Julien Brasselet
Ingénieur développement logiciels
Inscription : mars 2006
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme Julien Brasselet
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2006
Messages : 952
Points : 1 382
Points : 1 382
Envoyer un message via MSN à jbrasselet
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
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
jbrasselet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 09h31   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
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...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h27.


 
 
 
 
Partenaires

Hébergement Web