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 :

Linq, Distinct et new sur des collections


Sujet :

Linq

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Linq, Distinct et new sur des collections
    Bonjour à tous,

    Je travaille avec Linq et des collection et j'ai des soucis avec le distinct comme illustré ci-dessous :

    J'ai une collection de type ObjTest(nom; prenom):
    nom1;prenom1
    nom1;prenom1
    nom2;prenom2
    nom2;prenom2

    et je cherche à créer une nouvelle collection de mon même type ObjTest en retirant les doublons.

    J'ai construit le fichier VB suivant mais j'ai besoin d'éclaircissements car ma nouvelle collection a toujours ses 4 lignes.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Public Class Test
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim tab As New List(Of objTest)
            Dim obj1 As New objTest()
            obj1.nom = "nom1"
            obj1.prenom = "prenom1"
     
            Dim obj2 As New objTest()
            obj2.nom = "nom1"
            obj2.prenom = "prenom1"
     
            Dim obj3 As New objTest()
            obj3.nom = "nom2"
            obj3.prenom = "prenom2"
     
            Dim obj4 As New objTest()
            obj4.nom = "nom2"
            obj4.prenom = "prenom2"
     
            tab.Add(obj1)
            tab.Add(obj2)
            tab.Add(obj3)
            tab.Add(obj4)
     
     
            Dim tst As IEnumerable(Of objTest) = (From s In tab _
                       Select New objTest With { _
                        .nom = s.nom, _
                        .prenom = s.prenom}).Distinct().ToList()
     
            Console.ReadLine()
        End Sub
     
        Class objTest
            Private _nom As String
            Property nom() As String
                Get
                    Return _nom
                End Get
                Set(ByVal value As String)
                    _nom = value
                End Set
            End Property
     
            Private _prenom As String
            Property prenom() As String
                Get
                    Return _prenom
                End Get
                Set(ByVal value As String)
                    _prenom = value
                End Set
            End Property
     
        End Class
    End Class

  2. #2
    Membre habitué
    Avatar de jgard
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Points : 140
    Points
    140
    Par défaut
    Bonjour,

    Ce problème vient du fait que le Distinct utilise les comparateurs par défaut, et donc si tu travailles sur des objets et non des types valeurs, le equals va trouver 4 références distinctes. Par contre, si tu avais utilisé un type anonyme, cela aurait fonctionné car les méthodes Equals et GetHashCode sont redéfinies. Pour régler ton problème, il suffit donc de redéfinir ces 2 méthodes dans ta classeObjTest pour comparer chacune des valeurs.

Discussions similaires

  1. Generics sur des collections
    Par ThomasEscolan dans le forum Langage
    Réponses: 12
    Dernier message: 26/08/2011, 14h00
  2. Réponses: 1
    Dernier message: 05/06/2009, 12h52
  3. [SP-2007] Déploiement d'un site modèle sur des collections différentes
    Par zoumar dans le forum SharePoint
    Réponses: 1
    Dernier message: 05/06/2009, 12h52
  4. Select et insert sur des collections
    Par layouni dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2008, 14h52
  5. Réponses: 1
    Dernier message: 30/03/2008, 04h20

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