Précédent   Forum des professionnels en informatique > Dotnet > Accès aux données > Linq
Linq Forum d'entraide sur la manipulation de données avec Linq
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2011, 08h26   #1
Membre Expert
 
Avatar de mayekeul
 
Inscription : août 2005
Messages : 1 213
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 1 213
Points : 1 306
Points : 1 306
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 :
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
__________________
Alleï Bonjour chez vous!
mayekeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 08h49   #2
Membre Expert
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
Software Architect
Inscription : octobre 2010
Messages : 767
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Software Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 767
Points : 1 577
Points : 1 577
Envoyer un message via MSN à GuruuMeditation
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.
__________________
Microsoft MVP : Visual C#

MCPD - Windows Developer 4
MCPD - Web Developer 4
MCTS - Silverlight 4, Development

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 09h02   #3
Membre Expert
 
Avatar de mayekeul
 
Inscription : août 2005
Messages : 1 213
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 1 213
Points : 1 306
Points : 1 306
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.
__________________
Alleï Bonjour chez vous!
mayekeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 19h24   #4
Membre Expert
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
Software Architect
Inscription : octobre 2010
Messages : 767
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Software Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 767
Points : 1 577
Points : 1 577
Envoyer un message via MSN à GuruuMeditation
Y'a moyen de faire un truc style :
Code C# :
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;})
__________________
Microsoft MVP : Visual C#

MCPD - Windows Developer 4
MCPD - Web Developer 4
MCTS - Silverlight 4, Development

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 08h41   #5
Membre Expert
 
Avatar de mayekeul
 
Inscription : août 2005
Messages : 1 213
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 1 213
Points : 1 306
Points : 1 306
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 :
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
__________________
Alleï Bonjour chez vous!
mayekeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 08h49   #6
Membre Expert
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
Software Architect
Inscription : octobre 2010
Messages : 767
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Software Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 767
Points : 1 577
Points : 1 577
Envoyer un message via MSN à GuruuMeditation
Perso je préfère utiliser First(). Linq peut optimiser le bazar en l'équivalent d'un TOP(1) sql.
__________________
Microsoft MVP : Visual C#

MCPD - Windows Developer 4
MCPD - Web Developer 4
MCTS - Silverlight 4, Development

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 09h43   #7
Membre Expert
 
Avatar de mayekeul
 
Inscription : août 2005
Messages : 1 213
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 1 213
Points : 1 306
Points : 1 306
moi aussi, ne fut-ce que par sa lisibilité.

Il ne me reste plus qu'a remercier de ton aide qui fut aussi utile qu'instructive

Un grand merci donc
__________________
Alleï Bonjour chez vous!
mayekeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h34.


 
 
 
 
Partenaires

Hébergement Web