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

ASP.NET MVC Discussion :

requet LinqToSql group by avec count


Sujet :

ASP.NET MVC

  1. #1
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut requet LinqToSql group by avec count
    bonjour,
    voila j'ai deux table :
    une table annonce qui contien un idannonce et d'autre champ
    et une table postule qui cintient le idannonce de la table annonce,

    avec d'autre champ,
    je veux avoir un affichage telque ,
    pour chaque idannonce le nombre de postule ,
    cad un group by sur l'idannonc et un count sur le nombre des postule

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    |  idannonce      | nb_psotule |
    =====================
    |  1              | 4          |
    ---------------------------
    | 2               | 2          |
    ---------------------------
    | 3               |  10       |
    merci ,
    j'attend votre aide

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Salut,

    tu es allé jeter un oeil aux samples de Linq sur le site de ms ?
    http://msdn.microsoft.com/en-us/vcsharp/aa336746

    et plus précisement:
    http://msdn.microsoft.com/en-us/vcsh...7#countGrouped

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre éclairé
    Homme Profil pro
    Developpeur .NET et Administrateur de bases de données
    Inscrit en
    Décembre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Developpeur .NET et Administrateur de bases de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 49
    Par défaut
    Bonjour MVC dev,
    ça fait deux jour que j'apprend LINQ, mais je crois que la reponse à ta demande ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    From p in postule
    group p by p.idannonce into g
    select idannonce,nb_postule = g.count()

  4. #4
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Je croisq ue ça ne fonctionnera pas avec la virgule
    il faut ajouter un new devant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    From p in postule
    group p by p.idannonce into g
    select new {idannonce,nb_postule = g.count()}
    mais c'est pareil cela fait seulement deus jours de mon coté

  5. #5
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    bonsoir tout le monde,
    merci deja pour vos reponse,

    mais aufaite le souci, c'est que qu'on je met la group by,ben tout ce qui suis se souligne en rouge :

    voici mon code

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
     var l = (
                             from c1 in entity.annonce
                             from c in entity.entreprise
     
     
                             where c1.identreprise == id__entre
                             && c.Identreprise== c1.identreprise
                             && (c1.archive == null || c1.archive == 0)
     
                             orderby c1.date_annonce descending
                             group c1 by c1.idannonce into g
                             select new listee
                             {
                                 TypeActivite = c1.typeactivite,
                                 fonction = c1.fonction,
                                 desc_poste = c1.descriptionposte,
                                 profil_rech = c1.profilrech,
                                 type_contrat = c1.typecontrat,
                                 salaire = c1.salaire,
                                 contacte = c1.contact,
                                 date_ann = (DateTime)c1.date_annonce,
                                 id_annonce = c1.idannonce
                                 ,
                                 titre = c1.titre,
                                 RaisonSociale=c.raisonsociale,
                             nb_reponse=g.count
                             }).Take(6);
    c'est a dire , dés que je met "group by" tout les c1 dans select se souligne en rouge, et il veut plus les connaitre,

    ===> je precise que je met le tout dans une class "listee" qui contient des get et des set .
    ca marche sans aucun souci, mais avec ce group by non

    :s :s

  6. #6
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Le group by est avant le orderby

  7. #7
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    je vien de tester et c'est la meme chose,
    aulieu de souligné en rouge les c1 de select il souligne le c1 de order by,
    et si j'enleve carrement le order by, ben c'est anouveau les c1 de select souligné en rouge,
    voici sur la piece jointe a quoi ca ressemble,
    c'est un vrais defit , et j'ai beau cherché mais j'arrive pas a comprendre d'ou vien le souci
    Images attachées Images attachées  

  8. #8
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Je crois que tu ne peux plus utiliser de c1 une fois ton groupby fait.
    Il faut que tu passes par ta variable g

  9. #9
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    oui mais comment !!!

  10. #10
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    En fait je suis en train de me dire que ce que tu fais n'est pas viable de cette manière.
    En effet, tu cherches à faire un groupby sur c1.annonce. Dans une requête sql normale, ton résultat ne pourrait comporter que ton count et ton element de groupby. Tu ne pourrais donc pas récupérer simplement tes autres valeurs.

    Il faut certainement repenser ta recherche.
    Soit tu fais une sous-requête, soit tu mets dans ton groupby tous les champs que tu veux récupérer

    En gros tu ne peux afficher avec un groupby, g.count() et g.key

  11. #11
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    aufaite vous avez raison, tout a fait d'accord avec vous,
    ce qui ma pousseé le faire dans une autre variable , cad d'y mettre que l'idannonce et son group by,
    le g.key et le g.count :

    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
     
     
      var coun = (
                                 from ca in entity.annonce
                                 from ce in entity.entreprise
                                 from c2 in entity.postule
                                 from c3 in entity.candidat
     
     
                                 where ca.identreprise == id__entre
                                 && ce.Identreprise == ca.identreprise
                                 && ca.idannonce == c2.idannonce
                                 && c3.idCandidat == c2.idcandidat
     
                                 group c2 by c2.idannonce into g
     
                                 select  new {g.Key,nb=g.Count()} );
    et aprés appelé la variabl coun en l'utilsant dans la requet principale qui en haut, en ajoutant dans le where que pour chaque idannce qui egale coun.key , qu'il envoie a la nb_repnse le g.count();


    mais ça aussi ca ne marche pas,
    le souci c'est que je n'arrive pas a recuper le g.key pour le mettre dans le where :s
    pour le recuperer je doit ajouter FirstOrDefaut() a la variable coun et ca a ce moment qui le me donne accé au g.key dans la where de la requet principale .
    mais avec FirstOrdefaut() , au moment ou j'execuste y a message d'erreur
    voila ce que ca donne sans le FirstOrDefaut et ce que ca donne avec le FirstOrDefaut()
    Images attachées Images attachées   

  12. #12
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Quel est ton message d'erreur ?

  13. #13
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    et ca c'est le message d'erreur quand j'execute le tout .
    aufaite moi je sais que le firtordefaut n'est pas dans la bonne place,
    mais c'est la seul possibiliter de recuper les deux variable que je veux;
    logiquement ca parrait correcte mais ca beug !!
    Images attachées Images attachées  

  14. #14
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Cela indique que ta requête n'a pas pu être exécutée. Regarde dans le détail de l'erreur si tu trouves plus d'information sur le sujet

  15. #15
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    apperement il reconnais pas le groupby.k ???
    c bizar quand meme,
    jet un coup d'oeil sur la piece jointe stp
    Images attachées Images attachées  

  16. #16
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    A priori il y aurait un bug linq avec mysql

    Ce lien peut peut-être t'aider :
    http://bugs.mysql.com/bug.php?id=46742

  17. #17
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    oui , une base avec mysql ,et tout se passe bien avec les autre action les autres requet avec linq to sql,
    c'est pas mon prmier aproche a linq to sql ,
    mais j'avoue que c'est la premiere fois avec group by sous linq to sql .
    et je me retrouve vraiment out, je me dis que logiquement c ça, mais appaerment c pas ça

  18. #18
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    oui tu as raison ,
    je suis entrain de chercher sur le net

  19. #19
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    pour ceux qui souhaite m'aidé,
    voici le dernier code et voici :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
       var l = (
                                            from c1 in entity.annonce
                                            from c in entity.entreprise
                                            from c2 in entity.postule
     
                                            where c1.identreprise == id__entre
                                            && c.Identreprise == c1.identreprise
                                            && (c1.archive == null || c1.archive == 0)
     
                                            &&
                                            c2.idannonce== c1.idannonce
                                            select new listee
                                            {
                                                TypeActivite = c1.typeactivite,
                                                fonction = c1.fonction,
                                                desc_poste = c1.descriptionposte,
                                                profil_rech = c1.profilrech,
                                                type_contrat = c1.typecontrat,
                                                salaire = c1.salaire,
                                                contacte = c1.contact,
                                                date_ann = (DateTime)c1.date_annonce,
                                                id_annonce = c1.idannonce ,
                                                titre = c1.titre,
                                                RaisonSociale = c.raisonsociale,
                                                nb_reponse = ((
                                               from cc in entity.postule
                                                where c2.idannonce== cc.idannonce
                                                    group cc by cc.idannonce into g
                                                    select new { nb= g.Count()}
                                                ).FirstOrDefault().nb
                                             )
                                            }).Take(6);              
     
                    return View(l.ToList());

    et l'erreur en piece jointe


    merci
    Images attachées Images attachées  

  20. #20
    Membre éclairé
    Homme Profil pro
    consultant java
    Inscrit en
    Août 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 325
    Par défaut
    bonjour tout le monde,
    aprés avoir galerer je vien de trouver une solution,
    pour que d'autre personne ne reste pas bloqué et perdre le temp que j'ai perdu,
    voila je donne la solution et je met en gra ce qui change tout et ce qui vous aidera dans votre projet personnel :


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
                    var l = (
                             from c1 in entity.annonce
                             from c in entity.entreprise
                             
                           
    
                             where c1.identreprise == id__entre
                         && c.Identreprise == c1.identreprise
                             && (c1.archive == null || c1.archive == 0)
                          
    
                             orderby c1.date_annonce descending
          group new { c, c1 } by new { kk = c1.idannonce, c1.archive, c1.typeactivite, c1.fonction,
              c1.descriptionposte, c1.profilrech, c1.typecontrat,c1.salaire,c1.contact,c1.date_annonce,
              c1.idannonce,c1.titre,c.raisonsociale,
                             } into g                         select new listee
                             {
                                 TypeActivite = g.Key.typeactivite,
                                 fonction = g.Key.fonction,
                                 desc_poste = g.Key.descriptionposte,
                                 profil_rech = g.Key.profilrech,
                                 type_contrat = g.Key.typecontrat,
                                 salaire = g.Key.salaire,
                                 contacte = g.Key.contact,
                                 date_ann = (DateTime)g.Key.date_annonce,
                                 id_annonce = g.Key.kk
                                 ,
                                 titre = g.Key.titre,
                                 RaisonSociale = g.Key.raisonsociale,
                               nb_reponse = (
    
                                  from xx in entity.postule
                                  where
                                  g.Key.kk == xx.idannonce
    
                                   && (g.Key.archive == null || g.Key.archive == 0)
    
                                  select xx.idcandidat).Count()                    
    
                             }).Take(6);
    
                  
               
    
                    return View(l.ToList());
    pour mieu comprendre mon code, il s'agit de deux table :
    > une table annonce: qui contient toute les annonce
    > une table Postule: qui contient les reponse au annoce
    et surement dans la table postule il y aura des annonce avec bcp de reponse et des annonce avec moin ou rien,
    alors le souci c'été que je vouler faire un groupe by par annonce


    et voila profiter de ce code et ne perdez pas le temp que j'ai perdu,
    >>>>> un qui sais vaut mieu que 10 qui cherche <<<<<<

    j'espere que ca aidera plein de monde

    bn courage

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

Discussions similaires

  1. Requete avec count/group/average
    Par Devko dans le forum Linq
    Réponses: 2
    Dernier message: 12/03/2014, 11h57
  2. requete select avec count et group by
    Par paco503 dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/05/2013, 17h42
  3. probleme avec une requete de group by avec having
    Par boumacmilan dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/04/2012, 15h00
  4. [mysql 5] requete avec count+ having + group by
    Par epeichette dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/10/2008, 19h52
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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