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 :

Requête linQ sur une table de correspondance de l'EDMX


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Par défaut Requête linQ sur une table de correspondance de l'EDMX
    Bonjour,

    voilà j'ai importé une BDD dans l'EDMX pour pouvoir faire du LinQ to Entity, une table de correspondance utilProfil qui fait la relation entre une table Utilisateur et Profil qui contient : idUtilisateur et idProfil.

    Je veux obtenir la liste des utilisateurs appartenant au profil que je sélectionne dans une dropdownList ensuite j'affiche le résultat dans une datagrid.

    Ma question est : Comment faire pour faire une requête de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT u.nom, p.nom FROM Profil AS p, UtilProfil AS up, Utilisateur As u
    WHERE up.idUtilisateur = up.idProfil
    en Linq To entity ??? Car la table utilprofil est devenu une relation dans l'EDMX.


    Pardonnez moi si je n'ai pas été assez clair.

    Cordialement.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 44
    Par défaut
    Normalement Entity a généré pour toi une propriété 'Utilisateurs' sur l'entité 'Profil'.
    Propriété qui te fournit donc la liste des utilisateurs d'un profil d'un donné, autrement dit ce que tu veux

    Donc il te suffit de binder les profils dans ta dropdownlist.
    Et ensuite a chaque fois qu'un profil est sélectionné tu récupère les valeurs de sa propriété 'Utilisateurs'. CQFD

  3. #3
    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
    Par défaut
    il me semble que ta requête n'a pas vraiment de sens... tu fais la jointure selon l'égalité entre un ID de profil et un ID d'utilisateur

    Sinon, comme le dit xamage, si ton mapping est bien fait tu dois avoir une propriété Profils dans la classe Utilisateur. Vu que ta requête SQL n'a pas de sens je ne vois pas comment la convertir en Linq, mais si tu cherches par exemple tous les utilisateurs qui ont le profil "Admin", tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from u in db.Utilisateurs
    where u.Profils.Any(p => p.Name == "Admin")
    select u;

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Par défaut
    Bonjour,

    tout d'abord merci pour ces réponses, j'ai bien une propriété UtilProfil dans ma classe Utilisateur ( dans l'EDMX ), qui correspond bien à ma table de correspondance dans ma BDD.

    Donc si j'ai bien compris il me suffit de faire appelle à cette propriété UtilProfil ?
    Ensuite je dois récupérer ce que j'ai sélectionner dans ma dropdownList : (dropdownList.selectedValue) .

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 44
    Par défaut
    Autant pour moi, oui en effet sur Utilisateur (ainsi que su Profil) entity t'a généré une propriété UtilProfils.
    Ainsi tu peux passer par cette propriété pour aller dans un sens ou dans l'autre :
    - unUtilisateur.UtilProfils te permettre de trouver tous les profils auxquels est rattaché l'utilisateur
    - unProfil.UtilProfils te permettra de trouver tous les utilisateurs dudit profil

    donc tu devrais pouvoir faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var users =
     from p in dataContext.Profil
     where p.nom == ddl.SelectedValue.ToString() // ddl étant la dropdownList des profils
     select p.UtilProfils.Utilisateur;
    Bon y a probablement des corrections à faire

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Par défaut
    Merci pour vos réponses j'ai enfin pu me débloquer et cela affiche bien tous les utilisateurs dans ma datagridView par rapport à ce que j'ai sélectionné dans la dropdoWnList.

    Pour ceux qui ont besoin je met ma méthode :

    Tout d'abord pour récupérer la valeur de ma dropdownList je la passe en parametre dans une variable afin de pouvoir ensuite y accéder:

    (Code Behind de ma page)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    protected void UsersFromProfilsObjectDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
      e.InputParameters["ProfilId"] = ddl_profils.SelectedItem.Value;
    }
    Ensuite dans la classe profil que j'ai créer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public List<Utilisateur> GetUsersFromProfil(int ProfilId)
            {
     
                return (from u in DBcontext.Utilisateur
                        where u.UtilProfils.Any(s => s.Id == ProfilId)
                        select u).ToList();
     
            }
    Quand je click sur le bouton valider je bind ma datagrid et j'obtiens bien la liste des utilisateurs par sociétés.

    Merci encore .

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

Discussions similaires

  1. Requête lente sur une table
    Par ninikkhuet dans le forum Administration
    Réponses: 6
    Dernier message: 15/02/2010, 18h45
  2. Requête conditionnelle sur une table
    Par Gizmo_68 dans le forum SQL
    Réponses: 2
    Dernier message: 31/07/2009, 11h09
  3. [AC-2003] Requête UPDATE sur une table sans relation
    Par SIGER_971 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 09/07/2009, 09h02
  4. Problème de requête Access sur une table Oracle
    Par Poulki dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 31/01/2008, 16h57
  5. Réponses: 4
    Dernier message: 27/12/2006, 21h53

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