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 :

Requete Linq SQL


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut Requete Linq SQL
    Bonjour je souhaite réaliser l'équivalent d'une requete SQL en Linq:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "SELECT ClientId, ClientNom, ClientCommercial, COUNT(*) \'nb\' FROM table"
                        + " WHERE ClientNom LIKE \'%" + TXT_Recherche.Text + "%\' GROUP BY ClientId "
                        + "ORDER BY ClientNom ASC";
    Ce code me permet de récupérer mes colonnes ClientId, ClientNom et ClientCommercial et me donne le nombre de produit d'un client (somme d'un même ClientId

    Voilà ou j'en suis et je n'arrive pas à grouper par ClientId

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var userList = from u in entity.table
                                   where u.ClientNom.Contains(TXT_Recherche.Text)
                                   orderby u.ClientNom
                                   select new { u.ClientId, u.ClientNom, u.ClientCommercial };
    Merci pour votre aide

  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 : 44
    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
    Euh, t'es sûr qu'elle fonctionne ta requête SQL ? Quand tu fais un GROUP BY, tu ne peux sélectionner que les colonnes selon lesquelles tu groupes, et des fonctions d'aggrégation (COUNT, SUM, MAX...)

    Ta requête n'a pas vraiment de sens : de quelle ligne vont venir les colonnes ClientNom et ClientCommercial ?

    Par exemple, si tu as ces données :

    ClientId - ClientNom - ClientCommercial
    1 - Joe - Toto
    1 - Jack - Titi
    2 - Jane - Tata

    Le groupement par ClientId va renvoyer une seule ligne pour l'ID 1, mais quelle sera la valeur de ClientNom ? Joe ou Jack ?


    Bref... en pratique je suppose que ClientNom et ClientCommercial ont toujours la même valeur pour un ClientID donné (ce qui indique d'ailleurs que tu as une redondance dans tes données... pas terrible). Dans ce cas tu peux grouper par Client, ClientNom et ClientCommercial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var userList = from u in entity.table
                   where u.ClientNom.Contains(TXT_Recherche.Text)
                   orderby u.ClientNom
                   group u by new { u.ClientId, u.ClientNom, u.ClientCommercial } into g
                   select new
                   {
                       g.Key.ClientId,
                       g.Key.ClientNom,
                       g.Key.ClientCommercial,
                       Count = g.Count()
                   };

  3. #3
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Bonjour et merci de me repondre

    j'ai testé le code que tu m'as donné mais j'ai une exception lorsque je laisse g.Count() Tout le reste fonctionne bien

    Sinon effectivement ClientId , ClientNom et ClientCommercial sont identiques, as tu une suggestion pour éviter cette redondance?

  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 : 44
    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
    Citation Envoyé par snay13 Voir le message
    j'ai testé le code que tu m'as donné mais j'ai une exception lorsque je laisse g.Count() Tout le reste fonctionne bien
    Quelle exception ?

    Citation Envoyé par snay13 Voir le message
    Sinon effectivement ClientId , ClientNom et ClientCommercial sont identiques, as tu une suggestion pour éviter cette redondance?
    Je suppose que ClientNom et ClientCommercial sont aussi dans la table des clients ? Dans ce cas il suffit de faire une jointure. Avec Linq, si les relations entre les tables sont correctement modélisées, c'est encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var userList = from u in entity.table
                   where u.Client.Nom.Contains(TXT_Recherche.Text)
                   orderby u.Client.Nom
                   group u by u.Client into g
                   select new
                   {
                       g.Key.Client,
                       Count = g.Count()
                   };
    Il n'y pas de jointure explicite dans la requête Linq, mais ça se traduit bien sûr par une jointure en SQL

  5. #5
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Desole de ma reponse tardive,

    j'ai une erreur avec ton premier code lors du databind() sur ma listview sans plus d'explication

    Par contre lorsque je l'enlève ca fonctionne bien.

    Il manque que cette possibilité d'avoir le nombre de clientId identique

    Merci pourton aide

  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 : 44
    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
    Citation Envoyé par snay13 Voir le message
    j'ai une erreur avec ton premier code lors du databind() sur ma listview sans plus d'explication
    C'est à dire ? il se passe quoi au juste ? ça affiche quoi ?
    Il y a toujours au moins un minimum d'information quand une exception est levée : type de l'exception, message, stacktrace, éventuellement exception interne...

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

Discussions similaires

  1. [Débutant] Requete linq to sql faire un genre de distinct
    Par Vannessa Sindy dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 15/09/2014, 01h56
  2. Abandon/Stop requete linQ to SQL
    Par NazOok dans le forum Linq
    Réponses: 5
    Dernier message: 03/04/2014, 13h46
  3. requete sql sous Linq SQL
    Par aitBaamran dans le forum Accès aux données
    Réponses: 0
    Dernier message: 08/01/2013, 18h54
  4. [Débutant] requete Linq To sql
    Par chlebta*tsotsi dans le forum Linq
    Réponses: 6
    Dernier message: 11/05/2012, 08h01
  5. Requete Linq (traduire une requete sql en linq)
    Par punakanta dans le forum Linq
    Réponses: 6
    Dernier message: 07/07/2011, 09h42

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