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 :

DataTable & Groupby & Sum & LINQ [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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  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 : 43
    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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)

  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
    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

  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 : 43
    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
    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...

  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
    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

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

Discussions similaires

  1. [Python 2.X] groupby fonction sum
    Par le_dilem dans le forum Général Python
    Réponses: 2
    Dernier message: 13/02/2015, 22h38
  2. Comment utilisez Group By et Sum en Linq
    Par randriano dans le forum Linq
    Réponses: 14
    Dernier message: 02/06/2010, 16h37

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