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 :

Un bon group by [Débutant(e)]


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut Un bon group by
    Bonjour,

    j'essaye de me mettre à Linq mais bon , il y a des chose que je ne comprends pas comment faire
    ici un group by

    j'ai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var eoss =
                    from c in cl
                    group eos by
                        c.OFFER_ID
                        into e
                        select new { somme = e.Sum(arg => arg.MWH_TOTAL), e, e.Key,oo=e.ElementAt(0) };
    bon, ça renvoie bien la somme et tout et tout
    mais ce que je voudrais, c'est (à l'instar d'une vraie requete sql) recevoir les champs calculé mais aussi tout les champs contenu dans mon object c
    dois-je les détailler un par un dans la clause "by" ?

    si une bonne ame pouvais me renseigner

    merci

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Dans ton select, ton e est de type IGrouping, qui implémente IEnumerable. Cet Ienumerable est la collection des éléments groupés. Il suffit donc de la parcourir pour les avoirs.

  3. #3
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    Merci,

    Donc, si je comprends bien, il n'y a pas moyen qu'il me renvoie directement une liste d'objet groupée dont la valeur (ici "MWH_TOTAL") serait remplacée par la somme des valeur.

  4. #4
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Y'a moyen de faire un truc style :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (from c in cl
                    group eos by
                        c.OFFER_ID
                        into e
                        select new { somme = e.Sum(arg => arg.MWH_TOTAL), e, e.Key,oo=e.ElementAt(0) }).ToList().SelectMany(c => c.g, (list,elem) => {elem.MWH_TOTAL= list.g.Key; return elem;})

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    je comprends,
    mais malgré cela, pas moyen d'échapper au foreach par après

    et ce que je veux faire, après reflexion l'impose
    donc autant faire simplement
    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
     
    ClaSs NewCLAs = new ClaSs(this);
                this.Clear();
                var eoss =
                    from eos in NewCLAs
                    group eos by
                        eos.OFFER_ID
                        into e
                        select new
                        {
                            SommeTotale = e.Sum(arg => arg.MWH_TOTAL),
                            nEOS = e.ElementAt(0)
                        };
                foreach (var item in eoss)
                {
                    item.nEOS.MWH_TOTAL = item.SommeTotale;
                    this.Add(item.nEOS);
                }
    une précision cependant
    est-il mieux de demander
    ou

  6. #6
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Perso je préfère utiliser First(). Linq peut optimiser le bazar en l'équivalent d'un TOP(1) sql.

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

Discussions similaires

  1. Group by et SUM ne me donne pas le bon résultat
    Par CLion dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/05/2015, 12h10
  2. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  3. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  4. [SWT] Un bon coin ou trouver des infos pratik
    Par yolepro dans le forum SWT/JFace
    Réponses: 8
    Dernier message: 04/12/2002, 14h08

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