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

Accès aux données Discussion :

Quelle techno pour effectuer une requete avec jointure ?


Sujet :

Accès aux données

  1. #1
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut Quelle techno pour effectuer une requete avec jointure ?
    Bonjour a tous,
    J'ai un projet a faire en c# pour demain matin et je me retrouve confronté a un problème que je n'arrive pas a résoudre. Je ne connais pas vraiment linq et j'ai une requête assez simple en sql que je n'arrive pas a faire en linq

    Je souhaite récuperer tous les fichiers qui sont autorisé à mon utilisateur courant.

    myUserLogon est un objet de type user

    la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT file.* FROM file
                    INNER JOIN droit     ON file.id = droit.id_file
                    INNER JOIN type_user ON droit.id_type_user = type_user.id
                    INNER JOIN user      ON type_user.id = user.id_type
    WHERE user.id=myUserLogon.id
    Pouvez vous m'aidez svp
    je stress a mort

  2. #2
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu es obligé de le faire en Linq ? Dans ce cas tu as dû avoir des cours dessus, non ? Tu utilises quoi pour l'accès aux données ? Linq to SQL, Entity Framework (Linq to Entities), autre ? Avec aussi peu d'infos c'est pas évident de te répondre...

    En supposant tu utilises Linq to SQL ou EF et que ton schema objet soit exactement celui de la base :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from f in db.file
    join d in db.droit on f.id = d.id_file
    join t in db.type_user on d.id_type_user = t.id
    join u in db.user on t.id = u.id_type
    where u.id = myUserLogon.id
    select f;

    Mais bon, en général on définit les relations dans le mapping, ce qui permet d'écrire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from u in db.user
    where u.id = myUserLogon.id
    select u.type_user.droits.Select(d => d.file);

  3. #3
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    J'étais pas obligé, mais je ne trouvais pas d'autre solutions. Puis je mis suis pris un peux tard. Normalement j'ai definis mes relations dans le .dbml donc je vais tester ton code.

    Ok ça marche cependant, désolé d'être vraiment nul, comment je fait pour récupérer chaque non de fichier ?

    sachant que je stocke le resultat dans result (var). Voila la suite de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var test2 = result.ToList();
                for (int i = 0; i < test2.Count; i++)
                {
                    DropDownList1.Items.Add(test2[i]......);
                }

  4. #4
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par JediMaster Voir le message
    J'étais pas obligé, mais je ne trouvais pas d'autre solutions.
    Bizarre quand même... Linq, c'est pas vraiment la première chose qu'on apprend quand on débute. Tu pouvais exécuter des requêtes SQL avec ADO.NET. Mais bon, loin de moi l'idée que Linq soit un mauvais choix, au contraire C'est juste qu'à mon avis il vaut mieux commencer par des technos plus "basiques" pour bien comprendre le fonctionnement.

    Citation Envoyé par JediMaster Voir le message
    Ok ça marche cependant, désolé d'être vraiment nul, comment je fait pour récupérer chaque non de fichier ?
    Ben je sais pas, je peux pas deviner ce qu'il y a dans la table (et donc dans l'objet) file... il y a surement un champ filename ou quelque chose comme ça, non ?
    Citation Envoyé par JediMaster Voir le message
    sachant que je stocke le resultat dans result (var). Voila la suite de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var test2 = result.ToList();
                for (int i = 0; i < test2.Count; i++)
                {
                    DropDownList1.Items.Add(test2[i]......);
                }
    C'est un DropDownList ASP.NET ? Le plus simple c'est de faire un binding entre le DropDownList et ta liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DropDownList1.DataSource = test2;
    DropDownList1.DataTextField = "filename"; // nom du champ à afficher
    DropDownList1.DataValueField = "id"; // nom du champ identifiant
    Ca ajoute automatiquement les éléments à la liste

  5. #5
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Merci pour tes réponses, entre temps j'ai utilisé une solution qu'un pote m'a suggéré. Je sais pas trop si c'est optimisé et tout mais ça fonctionne bien et mon projet n'est pas énorme donc ça va.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var result = from u in db.Authorizations
                        where u.Type_User.id == userLogged.Type_User.id
                        select new { u.File};
     
                var test2 = result.ToList();
     
     
                for (int i = 0; i < test2.Count; i++)
                {
                    DropDownList1.Items.Add(test2[i].File.name);
                }
    Sinon au début pour mon projet je souhaitais utilisé l'entity framework avec linq to entity (si j'avais bien compris puisque linq to SQL doit disparaitre apparemment) mais j'ai pas trouvé assez de doc donc j'ai laissé tombé et j'ai revu mes exigence a la baisse.
    Je ne connais pas bien le framework 3.5 (ni les autres d'ailleurs) et ducoup quand j'ai du utiliser une BD dans ma solution je me suis lancé dans un truc que je voulais utile pour la suite(a savoir linq to sql).
    Mais bon comme j'étais en vacances et que j'ai rien fait, je me retrouve a pondre un projet et essayer de comprendre les techno en 3 jours. Je rend le tout demain matin et là je fini le rapport (la nuit va être courte).

    J'ai jamais utilisé de mapping et je touchais qu'au bd avec Php. Sinon j'ai quelque base en java, ça aide pour le C# (la synthaxe du moins)

  6. #6
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Ben pour le mapping, il te suffit de remplacer ta boucle for par les 3 lignes que je t'ai donné...

    N'oublie pas le bouton si le problème est réglé

    Bon courage

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/01/2009, 03h17
  2. [MySQL] Cherche aide pour une requete avec jointure
    Par nasbe26 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/09/2007, 12h44
  3. [ Requete ] effectuer une requete avec la valeur d'un combo box
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 28/06/2006, 16h36
  4. [Conception] Comment créer un lien pour effectuer une requete ?
    Par Poutchou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/03/2006, 12h54
  5. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 21h22

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