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 :

Jointure en LINQ pour afficher un nom à la place d'un ID


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    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, 4.0 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

  3. #3
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Avec select test.UserName ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Il faut faire un grouping, puis prendre la date la plus élevée :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    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();

Discussions similaires

  1. [AC-2007] Double clic sur le nom pour afficher la fiche du contact
    Par Panada dans le forum IHM
    Réponses: 6
    Dernier message: 24/12/2009, 17h33
  2. [MooTools] Insertion fonction qui affiche le nom de l'image pour une galelrie photo :)
    Par bugordi dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 10/06/2009, 13h47
  3. Réponses: 0
    Dernier message: 02/06/2009, 15h03
  4. Réponses: 1
    Dernier message: 23/06/2008, 17h04
  5. Réponses: 8
    Dernier message: 11/11/2007, 18h06

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