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 :

Linq - Jointure Champs issues de plusieurs Table


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut Linq - Jointure Champs issues de plusieurs Table
    Bonjour à tous,

    C'est encore moi avec un nouvelle questions sur Linq.

    Je chercher désespérément de reproduire le type de requête SQL suivante sous Linq :

    Select a.*,b.Nom,b.Prenom,c.Adresse
    from a
    inner join b on ...
    inner join c on ...
    Est il possible de récupérer tous les champs d'une table directement (a.*) ? Car actuellement, je suis obligé d'ajouter un par un tous les éléments de ma table "a" à ma clause Select tous en y ajoutant les autres champs issues d'autres table (b et c) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var essai = from afe in dc.T_AFFECTATION_AFE
                            join res in dc.T_RESSOURCE_RES on afe.RES_CODE equals res.RES_CODE
                            join sal in dc.T_SALARIE_SAL on afe.CTE_CODE_CONTENEUR equals sal.SAL_CODE
                            where afe.AFE_ARCHIVAGE.Equals(false)
                            select afe, res, sal ;
    J'ai essayé ceci pour récupérer tous les champs des 3 tables mais ca ne marche pas ce qui est très embêtant ...

    - select new { afe, res, afe}
    - select afe, new { res.Nom, res,Prenom, afe.Adresse}
    - select new { afe, res.Nom, res,Prenom, afe.Adresse}
    j'ai essayé aussi ses synthaxes cela mais bien sur ca ne marche pas ...

    Vous connaissez une méthode ou je suis obligé d'indiquer manuellement tous les champs que l'on souhaite récupérer dans la clause Select ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de jgard
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Par défaut
    Tu peux essayer avec un type anonyme pour te faciliter les choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select new 
    {
        Affectation = afe,
        Ressource = res,
        Salarie = sal
    };

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut
    Bonjour,

    Malheureusement, j'avais déjà essayé cette solution mais elle ne marche pas.

    Car en fait ce n'est pas vraiment un simple requête Linq mais c'est une requête Linq to Entites que je souhaite faire.

    Et lorsque je lie la requête Linq à la GridControl de mon formulaire, ma grille se compose uniquement de 3 colonnes qui sont Afe,Res,Sal. Tandis que je voudrais afficher toutes les colonnes composant ces trois tables.

    J'ai essayé avec plusieurs paramètre comme let, into, et bien d'autres et j'obtiens toujours le même résultat ...

  4. #4
    Membre éprouvé
    Avatar de jgard
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Par défaut
    Si je comprends bien, tu obtiens bien toutes les données que tu souhaites mais c'est plutôt l'affichage qui pose problème. Dans ce cas, je te conseille plutôt de regarder du côté du binding de ta grille pour descendre d'un niveau.

  5. #5
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Peut être devrais tu faire un include. Tu récupère ton objet a, avec son lien vers l'objet b. Ceci sous entend que ton modèle entité à définit les liens entres ces entités.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from afe in dc.T_AFFECTATION_AFE.Incliude("MaProprieteRes").include("MaProprieteSal")
                            where afe.AFE_ARCHIVAGE
                            select afe;
    Ce code te permet de récupérer ton objet de type T_AFFECTATION_AFE. Ensuite tu peux gérer l'affichage de tes éléments dans ton gridview.

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut
    Re et merci encore,

    jgard >
    Il faut que je me penche plus en détails sur les Binding car je ne connais pas du tout ... et mon premier essai n'a pas été brillant

    oyigit >
    La méthode Inculde à l'air de correspondre selon la doc mais impossible de l'atteindre dans le code ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var query = dc.T_AFFECTATION_AFE.Include("T_RESSOURCE.RES_CODE").select(afe => afe);
    Juste au niveau du Include il me dit référence à l'assembly manquante etc ... enfin le baratin habituel. Mais j'ai bien la référence à l'assembly dans mon projet est bien présente et j'ai même ajoute la référence que j'ai trouvé dans la doc de Visual Studio ... Donc je ne comprends pas pourquoi je n'atteins pas cette méthode.

    Assembly : System.Data.Entity
    Référence : System.Data.Objects

    A moins que je me suis trompé mais je ne pense pas ...

    Sinon j'ai importé toutes ma base dans le modèle relationnel (*.edmx) donc j'ai bien toutes les relations entre les différentes tables.

    J'avoue que je comprends pas trop pourquoi je n'ai pas la méthode ...

    EDIT : Alors ... Comment dire je n'ai pas de fichier *edmx dans mon projet mais un fichier *dbml ce qui change tout mdr ... la boulette ...

    Je me repenche sur les DataBindings

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/01/2008, 14h57
  2. Réponses: 1
    Dernier message: 03/10/2007, 08h54
  3. Ajouter les champs identiques de plusieurs tables
    Par philippesorin dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2007, 08h52
  4. Création d'un Formuaire issu de plusieurs tables
    Par clara1505 dans le forum IHM
    Réponses: 2
    Dernier message: 20/05/2007, 17h28
  5. [conception] champs vides ou plusieurs tables ?
    Par in dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 17/02/2004, 08h41

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