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

C# Discussion :

list<T> d'une jointure


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut list<T> d'une jointure
    Bonjour,

    Stocker les résultats d'une seule table dans une list du type qui lui correspond est assez simple

    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
     
    List <Parent> Parents= new List<Parent>();
     
        SqlConnection conn = new SqlConnection("...");
        conn.Open();
        SqlCommand cmdAllParents = new SqlCommand("SELECT * FROM PARENTS", conn);
        SqlDataReader reader = cmdAllFilms.ExecuteReader();
        while(reader.Read())
        {
            Parent par = new Parent();
            par.Id = reader["Par_Num"];
            // etc..
            Parents.Add(par);
        }
        conn.Close();


    Mais comment faire pour stocker dans une list les résultats ramenés par une jointure?

    Dans mon cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "select * from PARENTS left outer join MEMBRE_UNI on PAR_MEM_NUM = MEM_NUM left join FONCTIONS on FON_NUM = MEM_FON_NUM where PAR_NOM like '" + recherche + "%'"
    Merci.

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Par défaut
    Bonjour,

    Etant donné que ta rêquete SQL ne va ramener que des éléments de ta table Parents, ceci fonctionne de la même façon que ton premier cas de figure.

  3. #3
    Membre expérimenté Avatar de AJemni
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2008
    Messages : 242
    Par défaut
    si tu veux les données de la table parent seulement, essay
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select PARENTS.* from Parent inner join ...
    ou selectionne seulement les champs que tu veut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select PARENTS.Id, PARENTS.Colonne1, ... FROM PARENTS INNER JOIN ...
    ici j'ai utilisé la syntaxe de T-SQL

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    merci de vos réponses.

    Je me suis peut être mal exprimé.

    Mon problème n'est pas dans la requete mais de quel type ma list doit etre étant donné que les données ramenées seront de plusieurs tables.

    dans le cas de base ma list est forcément de type parents étant donné que la requete ne renvoit que les données de cette table

    dois je avoir plusieures list tout simplement?

    merci d'avance

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Crée une classe spécifique pour ta requête...

  6. #6
    Membre confirmé
    Homme Profil pro
    Developpeur .Net
    Inscrit en
    Mai 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Developpeur .Net
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 32
    Par défaut
    Vous avez par example comme solution:
    Creez votre propre (Type) class avec les memes attributs que ceux retournes par votre JOIN.

  7. #7
    Membre expérimenté Avatar de AJemni
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2008
    Messages : 242
    Par défaut
    +1

    choisie uniquement les champs dont tu a besion et créer une classe spécifique.

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Un type anonyme peut aussi être une solution.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    merci une fois de plus pour vos réponses.

    Je vais partir sur la solution des types anonymes (que je connaissait pas du tout et dont je suis fan mtn ^^) qui est pour moi la moins contraignante.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par utan88 Voir le message
    Je vais partir sur la solution des types anonymes (que je connaissait pas du tout et dont je suis fan mtn ^^) qui est pour moi la moins contraignante.
    C'est très pratique dans certains cas, mais n'oublie pas que le scope d'un type anonyme est limité à la méthode courante... tu ne peux pas renvoyer une instance d'un type anonyme, ou alors seulement en tant que Object, et donc tu perds les infos du type

  11. #11
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Ca va vraiment dépendre de l'utilisation que tu veux en faire..

    Si dans la même méthode tu vas faire toutes tes opérations aucun soucis, le type anonyme convient idéalement, mais comme l'a dit Tomlev, si tu comptes balader ce "type" entre tes couches, il serait plus pérenne d'avoir une classe dédiée.
    Ce n'est pas très long de créer une classe qui plus est !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    enfait le but c'était de renvoyer les données dans le datareader dans une list

    du coup dans mon

    while (dr.read())

    je stocke dans les informations dans une variable de type anonyme et ensuite j'ajoute dans une list d'objet que je renvoi à la fin

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par utan88 Voir le message
    je stocke dans les informations dans une variable de type anonyme et ensuite j'ajoute dans une list d'objet que je renvoi à la fin
    Bah c'est exactement le cas pour lequel je disais que les types anonymes étaient pas adaptés...
    Quand tu vas récupérer ta liste d'objets dans une autre méthode, tu sauras juste que les éléments sont des Object ; tu n'auras plus les infos du type anonyme et tu ne pourras donc plus accéder aux propriétés (sauf par réflexion bien sûr, ou avec dynamic, mais c'est crade).
    Dans ton cas il vaut mieux que tu déclares une classe dédiée pour les résultats de cette requête

  14. #14
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    +1

    Comme expliqué plus haut, dans ce cas d'utilisation ce n'est pas pérenne.
    Créer une classe qui contient les propriétés que tu souhaites, et éventuellement un constructeur, ça va te prendre 20 minutes... soit plus que le temps de discuter de l'utilité de la classe dédiée

    On te donne nos avis, à toi de voir après.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    oui en effet je viens de tester à l'instant et sa perd tout son interet >.<

    je vais finalement partir sur une classe

    merci pour vos réponses

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/03/2010, 22h20
  2. [MySQL] Renseigner une liste déroulante dans un formulaire en faisant une jointure.
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 16/10/2006, 11h12
  3. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 13h10
  4. Lignes en double dans le résultat d'une jointure
    Par ledevelopeur dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 19h10
  5. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 18h41

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