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 :

Traduire cette requête SQL en Linq to entities.


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Par défaut Traduire cette requête SQL en Linq to entities.
    Bonjour à tous,

    J'espère que quelqu'un pourra m'aider à résoudre ce problème : j'essaye depuis plusieurs jours à traduire cette requête SQL en linq to entities.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                SELECT CLI.Id, AVG(SFC.Note)
                FROM Client AS CLI
                INNER JOIN SessionFormationClient AS SFC ON CLI.Id = SFC.IdClient
                INNER JOIN SessionFormation AS SFO ON SFO.Id = SFC.IdSessionFormation
                INNER JOIN TypeFormation AS TFO ON TFO.Id = SFO.IdTypeFormation
                INNER JOIN Examen AS EXA ON EXA.Id = TFO.IdExamen
                WHERE EXA.Id = 8
                GROUP BY CLI.Id
                ORDER BY AVG(SFC.Note) DESC

    J'ai bien lu des exemples sur la fonction AVG en linq, mais je n'en ai vu aucun qui faisait intervenir des jointures.

    Voici le résultat que je veux obtenir :

    IdClient - Moyenne
    1 10
    2 12
    ... etc
    J'ai commencé à faire ce genre de chose mais sans succès, je ne sais pas si je pars vers la bonne piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                var query = from client in this.ObjectContext.Clients
                            join sfc in this.ObjectContext.SessionFormationClients on client.Id equals sfc.IdClient
                            join sf in this.ObjectContext.SessionFormations on sfc.IdSessionFormation equals sf.Id
                            join tf in this.ObjectContext.TypeFormations on sf.IdTypeFormation equals tf.Id
                            join examen in this.ObjectContext.Examens on tf.IdExamen equals examen.Id
                            where examen.Id == 8
                            group client by sfc.Id into c
                            select new { IdClient = c.Key, c.Average(...malheureusement ici rien ne marche ...) };
    Merci d'avance pour votre aide.

  2. #2
    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
    Y'a pas besoin de faire les jointures si ton mapping est correctement fait!

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Par défaut
    Il y a besoin des jointures à cause du lazy loading non ?

    Par défaut les tables "jointes" ne sont pas chargées.

  4. #4
    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
    Il faut pas tout mélanger
    Ici il n'y a pas de jointures à faire car tu n'as pas un graph d'objet à remplir.
    Si il y'a une jointure en SQL c'est pour la clause where par exemple. Il te suffit d'écrire ca de maniere natuelle et les jointures seront automatiques.

    Un truc qui devrait ressembler à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var query = from client in this.ObjectContext.Clients
                            select new { IdClient = client.Id, Average = client.SessionFormationClients.Where(sfc=>sfc.SessionFormation.TypeFormation.Examen.Id==8).Average(sfc=>sfc.Note);

Discussions similaires

  1. Traduire une requête SQL en LINQ
    Par julien_fauquereau dans le forum Linq
    Réponses: 13
    Dernier message: 08/07/2011, 09h50
  2. Je ne comprends pas cette requête SQL
    Par khalildz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/11/2010, 14h00
  3. Conversion requête SQL en LINQ
    Par CaptainChoc dans le forum Linq
    Réponses: 7
    Dernier message: 27/04/2009, 10h27
  4. Besoin de conseil concernant cette requête SQL
    Par loic20h28 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/01/2009, 09h36
  5. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29

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