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

C# Discussion :

Compter occurence dans une liste d'objet


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut Compter occurence dans une liste d'objet
    Bonjour j'ai un objet de ce type :

    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
     
        public class ValAlm
        {
            public String TimeStamp { get; set; }
            public String Alarme { get; set; }
            public String Numero_OF { get; set; }
     
     
            public ValAlm()
            {
                TimeStamp = "01/01/0001 00:00:00";
                Alarme = "";
                Numero_OF = "";
            }
        }
    Je génère une List de ce genre d'objet.

    Ce que j'aimerai faire c'est de compter dans ma liste, le nombre d'occurences du champ Alarme et de les compter (en SQL, une somme et un groupBy feraient l'affaire). Comment le faire proprement avec Linq ?

    Merci d'avance .

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var occurences = taListe.Select(x => x.Alarme).Distinct().Count();
    Ou ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var occurences = (from item in taListe
    		  group item by item.Alarme into myGroup
    		  select myGroup).Distinct().Count();
    Le résultat sera le même, c'est juste une question de préférence syntaxique
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    En fait ça me donne un résultat étrange. Par exemple ce que j'aimerais, imaginons ces données :

    Dans ma List j'ai 3 ValAlm :

    objet [0] -> - TimeStamp = ""
    - Alarme = "Alm1"
    - Numero_OF = "val1"

    objet [1] -> - TimeStamp = ""
    - Alarme = "Alm2"
    - Numero_OF = "val2"

    objet [2] -> - TimeStamp = ""
    - Alarme = "Alm1"
    - Numero_OF = "val3"


    Ce que j'aimerai en retour par exemple c'est une list avec ces valeurs :

    objet [0] -> - Alarme = "Alm1"
    - Occurence = 2


    objet [1] -> - Alarme = "Alm2"
    - Occurence = 1

    et le tout classer par occurence décroissante.

    Je ne sais pas si c'est possible en Linq :S

  4. #4
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Comme DotNetMatt j'ai mi les deux syntax (au choix)...


    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
    20
    21
    22
    23
    24
                var valAlms = new List<ValAlm>
                {
                    new ValAlm { Alarme="abc", Numero_OF="z42" },
                    new ValAlm { Alarme="def", Numero_OF="i85" },
                    new ValAlm { Alarme="ghj", Numero_OF="i69" },
                    new ValAlm { Alarme="abc", Numero_OF="a78" },
                    new ValAlm { Alarme="def", Numero_OF="t45" },
                    new ValAlm { Alarme="abc", Numero_OF="e96" },
                };
     
                var result = valAlms.GroupBy(v => v.Alarme)
                    .Select(group => new
                    {
                        Key = group.Key,
                        Alarmes = group.OrderBy(a => a.Numero_OF)
                    });
     
                var result2 = from v in valAlms
                              group v by v.Alarme into gr
                              select new
                              {
                                  Key = gr.Key,
                                  Alarmes = gr.OrderBy(a=> a.Numero_OF)
                              };

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    J'obtiens effectivement les alarmes distinctement mais je n'ai pas leur occurrences dans la List :S

  6. #6
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // en utilisant la syntaxe "méthode"
    var query1 = valAlms
        .GroupBy (alm => alm.Alarme,
                 (key, values) => new { Alarme = key, Occurrences = values.Count () })
        .OrderByDescending (item => item.Occurrences);
     
    // en utilisant la syntaxe "requête"
    var query2 = from valAlm in valAlms
                 group valAlm by valAlm.Alarme into grp
                 let occurrences = grp.Count ()
                 orderby occurrences descending
                 select new { Alarme = grp.Key, Occurrences = occurrences };
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    J'ai rajouté un champ Nombre :
    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
    var result = valAlms.GroupBy(v => v.Alarme)
                    .Select(group => new
                    {
                        Key = group.Key,
                        Nombre = group.Count(),
                        Alarmes = group.OrderBy(a => a.Numero_OF)
                    });
     
                var result2 = from v in valAlms
                              group v by v.Alarme into gr
                              select new
                              {
                                  Key = gr.Key,
                                  Nombre = gr.Count(),
                                  Alarmes = gr.OrderBy(a=> a.Numero_OF)
                              };

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par katkiller Voir le message
    J'ai rajouté un champ Nombre :
    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
    var result = valAlms.GroupBy(v => v.Alarme)
                    .Select(group => new
                    {
                        Key = group.Key,
                        Nombre = group.Count(),
                        Alarmes = group.OrderBy(a => a.Numero_OF)
                    });
     
                var result2 = from v in valAlms
                              group v by v.Alarme into gr
                              select new
                              {
                                  Key = gr.Key,
                                  Nombre = gr.Count(),
                                  Alarmes = gr.OrderBy(a=> a.Numero_OF)
                              };
    Merci ça marche Nikel !!

    A bientôt !

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

Discussions similaires

  1. Checkbox dans une liste d'objets
    Par Flackou dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 20/01/2009, 18h13
  2. Nombre d'occurence dans une liste
    Par Axiome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/10/2008, 13h15
  3. Chercher un objet dans une liste d'objet
    Par Axiome dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/10/2008, 09h43
  4. recherche par attribut dans une liste d'objet
    Par Jacobian dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 28/05/2008, 21h11
  5. compter fichiers dans une liste
    Par captainamerica75 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2007, 17h59

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