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

VB.NET Discussion :

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


Sujet :

VB.NET

  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 : 46
    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 expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    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
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    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 : 46
    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 Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 22/08/2012, 20h38
  2. Réponses: 10
    Dernier message: 12/09/2008, 10h09
  3. [RegEx] Changer la valeur d’un attribut dans une chaîne
    Par sara21 dans le forum Langage
    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 avec Java
    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