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 :

Group by Sum et count sur des objets


Sujet :

Linq

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut Group by Sum et count sur des objets
    Bonjour,
    Voilà j'ai trois objets
    GenRsaErreur de propriétes CodeErreur et LibelleErreur et de constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub New(ByVal codErreur As eCodeErreursGenRsa)
    eCodeErreursGenRsa est une énumération

    GenRsaRejet avec entre autre les propriétés
    Montant entier
    Erreur() GenRsaErreur


    Et GenRsaRejetStatistique ayant les propriétés suivantes
    Erreur
    Nombre
    NombreTotal
    Montant

    Je cherche à creer une liste de GenRsaRejetStatistique à partir d'une liste de
    GenRsaRejet
    GenRsaRejet doit contenir pour chaque code erreur de la liste GenrsaRejet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Montant=Somme(genrsaRejet.Montant)
    Nombre=Somme(GenrsaRejet.Nombre)
    En Sql cela donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select codeErreur, sum(Montant) as montant, count(*) as Nombre
    from genrsarejet
    group by codeErreur
    Voilà mon code qui ne compile pas le moins du monde.
    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
     
            Public Shared Function GetListGenRsaRejetStatistique(ByVal listGenrsaRejetsFiltree As List(Of GenRsaRejet), ByVal typePrestation As [DIM].DimTypePrestation) As List(Of GenRsaRejetStatistique)
                Dim dicErreur As Dictionary(Of GenRsaErreur.eCodeErreursGenRsa, String)
                dicErreur = GenRsaErreur.DicoErreurMessageParType(typePrestation)
                Dim iMontantTotal As Integer?
                Dim iNombreTotal As Integer
                'Dim errCode As GenRsaErreur.eCodeErreursGenRsa
                iMontantTotal = listGenrsaRejetsFiltree.Sum(Function(r As GenRsaRejet) r.Montant)
                If iMontantTotal Is Nothing Then
                    iMontantTotal = 0
                End If
                iNombreTotal = listGenrsaRejetsFiltree.Count
                Dim result = From lr In listGenrsaRejetsFiltree _
                             Group By lr.Erreur.CodeErreur Into somme = Sum(lr.Montant)
                            Select New GenRsaRejetStatistique With {.Erreur = New GenRsaErreur(lr.Erreur.CodeErreur), .Montant = somme, .NombreTotal = iNombreTotal}
     
     
                    Return result.ToList()
            End Function
    Merci de votre aide
    Soazig

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Le problème initial est résolu Voici le 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
            Public Shared Function GetListGenRsaRejetStatistique(ByVal listGenrsaRejetsFiltree As List(Of GenRsaRejet), ByVal typePrestation As [DIM].DimTypePrestation) As List(Of GenRsaRejetStatistique)
                Dim dicErreur As Dictionary(Of GenRsaErreur.eCodeErreursGenRsa, String)
                dicErreur = GenRsaErreur.DicoErreurMessageParType(typePrestation)
                Dim iMontantTotal As Integer?
                Dim iNombreTotal As Integer
                iMontantTotal = listGenrsaRejetsFiltree.Sum(Function(r As GenRsaRejet) r.Montant)
                If iMontantTotal Is Nothing Then
                    iMontantTotal = 0
                End If
                iNombreTotal = listGenrsaRejetsFiltree.Count
                Dim result = From lr In listGenrsaRejetsFiltree _
                             Group By err = lr.Erreur.CodeErreur Into sommeMontant = Sum(lr.Montant), nombreElem = Count() _
                             Select New GenRsaRejetStatistique With {.Erreur = New GenRsaErreur(err), .Montant = sommeMontant, .Nombre = nombreElem, .NombreTotal = iNombreTotal}
     
                Dim rs = result.ToList
                Return rs
            End Function
    Mais en En plus il me faut faire une jointure externe entre le dictionnaire dicErreur et mon résultat sur dicErreur.key =GenRsaRejetStatistique.Erreur.CodeErreur. Je voudrais toutes les erreurs du dicErreur même celle qui ne sont pas dans result.
    Si je ne m'en sors pas toute seule je reviendrais vers vous.

    Soazig

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Et voilà la requête magique pour faire cela en jointure externe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Dim result = From dic In dicErreur _
                        Group Join rej In listGenrsaRejetsFiltree _
                        On dic.Key Equals rej.Erreur.CodeErreur Into sommeMontant = Sum(rej.Montant), nombreElem = Count() _
                  Select New GenRsaRejetStatistique With {.Erreur = New GenRsaErreur(dic.Key), .Montant = sommeMontant, .Nombre = nombreElem, .NombreTotal = iNombreTotal}
    A+
    Soazig

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

Discussions similaires

  1. Aide sur Group by , sum et count
    Par rippoz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/06/2007, 14h48
  2. utilisations de pointeurs sur des objets
    Par niarkyzator dans le forum Delphi
    Réponses: 21
    Dernier message: 13/12/2006, 09h42
  3. LOCK sur des objets
    Par Nick_Holmes dans le forum Oracle
    Réponses: 11
    Dernier message: 01/06/2006, 16h25
  4. Réponses: 9
    Dernier message: 31/05/2006, 11h56
  5. vector de pointeurs sur des objet
    Par jean-bobby dans le forum SL & STL
    Réponses: 26
    Dernier message: 06/08/2004, 14h54

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