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 :

Faire un where sur une table distante de la table selectionné (via les clés étrangères)


Sujet :

Linq

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut Faire un where sur une table distante de la table selectionné (via les clés étrangères)
    Bonjour à tous !

    J'espère que mon titre est assez évocateur.

    Alors le contexte, je travaille sur une application Silverlight

    Pour l'accès aux données, j'ai ajouté à mon projet Aspx (ajouté automatiquement lorsqu'on crée un projet silverlight) un ADo.Net Entity Data Model en y déclarant toutes les classes de ma base.

    Ensuite j'ai ajouté un Domain Service Class que j'ai parâmétré avec mon ADO.Net Entity Data Model.

    Enfin bref du côté silverlight, j'ai une classe qui se génère seul et qui me permet d'accéder aux données du coté aspx (cf : )

    Ca marche pas mal, j'interroge aisément ma base et je peux remplir mes combobox à loisir (je crée une fonction de recherche), j'arrive facilement a recuperer des éléments filtrés par certains combobox :

    Petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static EntityList<T_CONTRAT> GetByCodePortefeuille(T_PORTEFEUILLE_COMMERCIAL portefeuille)
            {
                SouscriptionContext context = new SouscriptionContext();
                var query = from contrat in context.GetT_CONTRATQuery()
                            where contrat.CON_INT_PRC_ID == portefeuille.PRC_INT_ID
                            select contrat;
     
                context.Load(query);
                return context.T_CONTRATs;
            }
    Cet exemple est parfaitement fonctionnel

    En revanche je rencontre un souci lorsque j'essaie de récupérer une liste de lignes d'une table en utilisant un Where.

    Pour mon problème j'ai 3 tables :

    T_CONTRAT
    T_STATUT
    T_RATT_STATUT_CONTRAT qui posséde une clé étrangère des deux autres tables et qui me permet de conserver un historique du statut de mes contrats

    J'ai essayé ce code la :

    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
    16
    17
    18
    19
    SouscriptionContext contextratt = new SouscriptionContext();
                var queryratt = from ratt in contextratt.GetT_RATT_STATUT_CONTRATQuery()
                                where ratt.T_STATUT.STT_COD_STATUT == Statut.STT_COD_STATUT
                                && ratt.SCT_DAT_FIN == null
                                select ratt;
                contextratt.Load(queryratt);
                EntityList<T_RATT_STATUT_CONTRAT> Ratts = contextratt.T_RATT_STATUT_CONTRATs;
                List<int> Id_Ratt = new List<int>();
                foreach (T_RATT_STATUT_CONTRAT ratt in Ratts)
                {
                    Id_Ratt.Add(ratt.SCT_ID_CONTRAT);
                }
     
                SouscriptionContext context = new SouscriptionContext();
                var query = from contrat in context.GetT_CONTRATQuery()
                            where Id_Ratt.Contains(contrat.CON_INT_ID)
                            select contrat;
                context.Load(query);
                return context.T_CONTRATs;
    mais ça plante sur la deuxième requête (de toute manière, la liste Id_Ratt ne contient rien)

    J'ai aussi essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SouscriptionContext context = new SouscriptionContext();
                var query  = from contrat in context.GetT_CONTRATQuery()
                             where contrat.T_RATT_STATUT_CONTRAT."pas d'accès à T_STATUT"
                             select contrat;
                context.Load(query);
                return context.T_CONTRATs;
    Et dans ce cas T_RATT_STATUT_CONTRAT un EntityCollection ce qui ne m'avance pas plus que ça puisque je ne sais pâs l'utiliser.

    Enfin bref je m'en remet à vos lumières pour savoir comment récupérer les éléments qui m'intéressent

    Cordialement

  2. #2
    Membre habitué
    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
    Points : 140
    Points
    140
    Par défaut
    Bonjour,

    C'est le fameux problème du where in à traduire en linq. Je suppose que ton exception indique quelque chose du genre Contains n'est pas reconnu par linq et ne peut être traduit en requête SQL.

    Pour régler ce problème, tu dois convertir ta séquence comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var query = from contrat in context.GetT_CONTRATQuery().ToList<type de GetT_CONTRATQuery>()
                            where Id_Ratt.Contains(contrat.CON_INT_ID)
                            select contrat;
    Voilà ça devrait t'aider.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/01/2009, 09h55
  2. Faire un Calcul sur une table (en groupant)
    Par suistrop dans le forum SAS Base
    Réponses: 3
    Dernier message: 07/11/2008, 14h49
  3. Réponses: 3
    Dernier message: 19/06/2007, 22h34
  4. comment faire un DROP sur une NESTED TABLE
    Par gilux dans le forum Oracle
    Réponses: 1
    Dernier message: 14/03/2006, 18h07
  5. Faire un Lock sur une table pendant l'exec d'un DTS
    Par Pete dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/03/2005, 14h17

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