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 24/01/2012, 13h28   #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 DataTable & Groupby & Sum & LINQ

Bonjour,

débutant en LINQ et en C#

Je crée la requete suivante pour qu'il me retourne le résultat dans une nouvelle table.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void ImportGroupBy(DataTable dataTable)
        {
            // grouper données de la datatable
            var result =
                from grp in csT_SQLDataSet1.TB_IMPORT
                group grp by grp.START_DATE into gt
                select dataTable.LoadDataRow(new object[] {                 
                    gt.First().START_DATE,
                    gt.First().ACCEPTED_DATE,
                    gt.First().CLICK,
                    gt.First().KWH_YEAR,
                    gt.Sum(sp=>sp.MWH_P),
                    gt.Sum(sop=>sop.MWH_OP),
                    gt.Sum(sy=>sy.MWH_YEAR}, false);
        }
bon ben , il ne me groupe rien du tout
qu'est-ce que je fait qui est pas bon??

merciiii
__________________
Alleï Bonjour chez vous!
mayekeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h01   #2
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 741
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
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 : 16 741
Points : 26 730
Points : 26 730
Bah tu crées une requête, mais tu ne l'exécutes jamais... Une requête Linq n'est exécutée que quand tu commences à l'énumérer. D'autre part :

- choisis mieux les noms des variables dans ta requête, car là ils prêtent à confusion : ta variable grp ne représente pas un groupe, mais une ligne de la table. Il vaudrait mieux faire comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
            var result =
                from row in csT_SQLDataSet1.TB_IMPORT
                group row by row.START_DATE into grp
                select dataTable.LoadDataRow(new object[] {                 
                    grp.First().START_DATE,
                    grp.First().ACCEPTED_DATE,
                    grp.First().CLICK,
                    grp.First().KWH_YEAR,
                    grp.Sum(sp=>sp.MWH_P),
                    grp.Sum(sop=>sop.MWH_OP),
                    grp.Sum(sy=>sy.MWH_YEAR}, false);
- Il vaut mieux éviter d'introduire des effets de bord dans une requête Linq, ça peut causer des comportements inattendus et difficiles à prévoir. Fais plutôt le LoadDataRow dans une boucle :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void ImportGroupBy(DataTable dataTable)
{
    var result =
        from row in csT_SQLDataSet1.TB_IMPORT
        group row by row.START_DATE;
 
    foreach (var grp in result)
    {
        dataTable.LoadDataRow(new object[] {                 
                        grp.First().START_DATE,
                        grp.First().ACCEPTED_DATE,
                        grp.First().CLICK,
                        grp.First().KWH_YEAR,
                        grp.Sum(sp=>sp.MWH_P),
                        grp.Sum(sop=>sop.MWH_OP),
                        grp.Sum(sy=>sy.MWH_YEAR}, false);
    }
}
(ça a aussi l'avantage de corriger le fait que ta requête n'était pas énumérée et donc pas exécutée)
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 19h32   #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
bonjour,

merci de l'aide

mais pour une raison que je ne comprends pas
cela ne fonctionne pas
et effectivement cela ne lance pas la requete
mais pas plus si je prends ton exemple

:'(

je suis nul je sais
__________________
Alleï Bonjour chez vous!
mayekeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 21h25   #4
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 741
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
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 : 16 741
Points : 26 730
Points : 26 730
A quoi vois-tu que ça ne fonctionne pas ? Il y a une erreur, ou c'est juste que ça ne donne pas le résultat voulu ?

Tu es sûr que tu passes bien dans la méthode ImportGroupBy ? Mets un point d'arrêt pour vérifier. Et montre le code qui appelle ImportGroupBy...
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 07h52   #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
Bonjour,

Simplement parce qu'il ne va pas executer la requete quand il est au pas à pas!

Mais bon et mea culpa pour mes bétises.

j'ai oublié de remplir la table TB_IMPORT avant de lancer la méthode

ça risquait pas de fonctionner

maintenant et avec ton aide, cela fonctionne au poil.

J'ai quand même encore quelques difficulté à appréhender LINQ par rapport à du SQL mais bon...

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 20h29.


 
 
 
 
Partenaires

Hébergement Web