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/11/2011, 23h37   #1
Membre du Club
 
Inscription : juillet 2011
Messages : 202
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 202
Points : 65
Points : 65
Par défaut Jointure en LINQ pour afficher un nom à la place d'un ID

Bonjour ,

J'ai une table qui contient plusieurs colonnes dont un ID qui est une clé étrangère liée à une autre table
Dans cette autre table est stocké le nom d'une personne auquel correspond cet ID

Je cherche à avoir ce nom à la place de l'id

Après des recherches sur le net j'ai fait ça sans grand conviction...

Code :
1
2
3
4
            var HistoUser = from i in sdt.DataContext.GetTable<HistoUsers>()
                            join test in sdt.DataContext.GetTable<Users>()
                            on i.IdUser equals test.idUser
                            select i;

le nom de la personne est contenu dans la table Users, la colonne s'appelle NameUser

Si quelqu'un peut m'aider !
Merci d'avance
arngrimur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 08h36   #2
Rédacteur/Modérateur
 
Avatar de SaumonAgile
 
Homme Johann Blais
Architecte de système d'information
Inscription : avril 2007
Messages : 4 026
Détails du profil
Informations personnelles :
Nom : Homme Johann Blais
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 4 026
Points : 5 967
Points : 5 967
Il ne te reste plus qu'à récupérer dans le select la propriété de test qui t'intéresse.
__________________
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5 sous license Apache 2.0.

Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor

Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
SaumonAgile est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 08h40   #3
Membre Expert
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
Software Architect
Inscription : octobre 2010
Messages : 767
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Software Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 767
Points : 1 577
Points : 1 577
Envoyer un message via MSN à GuruuMeditation
Avec select test.UserName ?
__________________
Microsoft MVP : Visual C#

MCPD - Windows Developer 4
MCPD - Web Developer 4
MCTS - Silverlight 4, Development

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 09h32   #4
Membre du Club
 
Inscription : juillet 2011
Messages : 202
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 202
Points : 65
Points : 65
Merci pour vos réponses, en fait j'avais commencé à faire ça mais ça me posais problème car ma méthode retournait à la base une liste d'objets...


et si je faisais test.nameUser ,j'avais qu'un champ et une simple liste de string...


du coup j'ai fait comme ça:

Code :
1
2
3
4
5
6
7
8
9
10
11
        public static List<HistoUsers> GetHistoUsers()
        {
 
 
            var HistoUser = from i in sdt.DataContext.GetTable<HistoUsers>()
                            join test in sdt.DataContext.GetTable<Users>()
                            on i.IdUser equals test.idUser
                            select i;
 
            return HistoUser.ToList();
        }
Et dans mon .aspx j'ai fait ça:

Code :
1
2
3
                <telerik:GridBoundColumn DataField="Users.nameUser" DataType="System.String" HeaderText="Name User"
                    SortExpression="Users.nameUser" UniqueName="Users.nameUser">
                </telerik:GridBoundColumn>

et ça marche!

Par contre j'aurais une autre question :

Dans mon tableau s'affiche des dates différentes pour un même ID je souhaiterais ne garder que la ligne avec la date la plus récente...
Comment je pourrais faire ça ?

Merci d'avance !
arngrimur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 18h33   #5
Membre Expert
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
Software Architect
Inscription : octobre 2010
Messages : 767
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Software Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 767
Points : 1 577
Points : 1 577
Envoyer un message via MSN à GuruuMeditation
Il faut faire un grouping, puis prendre la date la plus élevée :
Code C# :
1
2
3
4
5
6
 
var HistoUser = from i in sdt.DataContext.GetTable<HistoUsers>()
                            join test in sdt.DataContext.GetTable<Users>()
                            on i.IdUser equals test.idUser
                            group i by i.idUser into g 
                            select g.OrderByDescending(d => d.Date).First();
__________________
Microsoft MVP : Visual C#

MCPD - Windows Developer 4
MCPD - Web Developer 4
MCTS - Silverlight 4, Development

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation 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 06h23.


 
 
 
 
Partenaires

Hébergement Web