1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : avril 2016
    Messages : 6
    Points : 3
    Points
    3

    Par défaut Recherche d'unicité de valeur d'un attribut dans une collection d'objets

    Bonjour à tous,

    J'ai un cas que je sais résoudre de manière "complexe,lourde" avec des boucles For Each et beaucoup de code. Mais je me demande s'il y a un moyen de bien faire.

    Je m'explique, j'ai un objet X du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Public Class Ecriture
            Property Id As Int64
            Property IdTypeEcriture As Int64 
            Property DateEcriture As Date
            Property Devise As String 
            Property Montant As Decimal 
            Property Nombre As Integer 
            Property Libelle As String 
        End Class
    Et une collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MesEcritures as new List(Of Ecriture)
    Ce que je cherche à savoir, c'est si dans cette collection, toutes les écritures ont un même type (valeur IdTypeEcriture égale) et une même devise (valeur Devise égale).
    Et dans le cas de différence, qu'est ce qui est différent : Le type, la devise ou les deux.

    Est ce qu'il existe une requête LINQ et un autre moyen facile de faire cela sans passer par un For Each E as Ecriture In MesEcritures avec mémorisation des types et devises


    Merci par avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 456
    Points : 1 159
    Points
    1 159

    Par défaut

    Bonjour,

    La réponse est oui !

    Déjà le lien qui va bien

    Ce que j'écrirais dans ton cas (en c# désolé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(MesEcritures.Count() > 0)
    {
        //Je commence par récupérer les premieres valeurs 
          string currentDevise = MesEcritures.First().Devise ;
         int currentIdTypeEcriture = MesEcritures.First().IdTypeEcriture ;
        //je vérifie que tous les éléments de la liste ont bien ces même valeurs
        bool isUnicite  = MesEcritures.Any( item => item.IdTypeEcriture == currentIdTypeEcriture  && item.Devise == currentDevise )
    
    }
    Donc dans ton cas je dirais que ta solution linq tourne autour de Any et first.

    bon code,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  3. #3
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 333
    Points : 4 555
    Points
    4 555
    Billets dans le blog
    5

    Par défaut

    Bonjour,

    J@ckHerror te met sur la bonne piste, mais il y a une petite erreur dans son code : Il faut utiliser All et non Any
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(MesEcritures.Count() > 0)
    {
        //Je commence par récupérer les premieres valeurs 
          string currentDevise = MesEcritures.First().Devise ;
         int currentIdTypeEcriture = MesEcritures.First().IdTypeEcriture ;
        //je vérifie que tous les éléments de la liste ont bien ces même valeurs
        bool isUnicite  = MesEcritures.All( item => item.IdTypeEcriture == currentIdTypeEcriture  && item.Devise == currentDevise )
    }
    Autre possibilité : pour continuer de garder Any, il faut inverser la condition, et recherche un élément différent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(MesEcritures.Count() > 0)
    {
        //Je commence par récupérer les premieres valeurs 
          string currentDevise = MesEcritures.First().Devise ;
         int currentIdTypeEcriture = MesEcritures.First().IdTypeEcriture ;
        //je vérifie que tous les éléments de la liste ont bien ces même valeurs
        bool isUnicite  = !MesEcritures.Any( item => item.IdTypeEcriture != currentIdTypeEcriture  || item.Devise != currentDevise )
     
    }
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : avril 2016
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Super. Merci à vous. C'est exactement ce que je cherchais.

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

Discussions similaires

  1. [XSLT] [Xalan] Récupérer la valeur d'un attribut dans une feuille XSLT
    Par polymorphisme dans le forum XML
    Réponses: 4
    Dernier message: 22/08/2012, 20h38
  2. Réponses: 10
    Dernier message: 12/09/2008, 10h09
  3. Réponses: 2
    Dernier message: 20/07/2008, 19h31
  4. recherche par attribut dans une liste d'objet
    Par Jacobian dans le forum Débuter
    Réponses: 1
    Dernier message: 28/05/2008, 21h11
  5. Comment changer la valeur d'un attribut avec une stylesheet?
    Par BugsBunny dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/06/2006, 18h18

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