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 dans une SortedList(Of)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut Recherche dans une SortedList(Of)
    Bonjour

    J'au une ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = CommunesSource.IndexOfValue((From oTo As Toponyme In CommunesSource.Values
                                                                         Where oTo.sNomDépartement = sNomDép AndAlso oTo.sNom = sNomTo).FirstOrDefault)
    Qui me permet de trouver la première occurence à la demande avec la commande FirstOrDefault

    Mais comme obtenir la liste de tous les enregistrements répondant au query?

    Merci

    Bernard

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Il faut créer un aggrégat de type function :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Canada.oProvinces.Where(Function(f) f.Value.sNom '.......etc.....
    --> retournera toutes les occurrences trouvées.

    Après c'est difficile de savoir ce que tu cherches à faire avec la structures des classes qui nous sont complètements inconnu : Toponyme ...

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut
    Oui désolé je n'ai pas donner assez de détails

    Voici la déclaration de ma SortedList(Of)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim CommunesSource As New SortedList(Of String, Toponyme)
    Voici ma Class Toponymes

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Public Class Toponyme
     
        Public Sub New()
        End Sub
        Public Sub New(sNomToponymes As String)
            sNom = sNomToponymes
        End Sub
        Public Sub New(sNomTop As String, sCodSrc As String)
            sNom = sNomTop
            sCodeSource = sCodSrc
        End Sub
        Public Sub New(sNomTop As String, sCodSrc As String, sDpt As String)
            sNom = sNomTop
            sCodeSource = sCodSrc
            sNomDépartement = sDpt
        End Sub
        Public Sub New(sNomTop As String, sCodSrc As String, sDpt As String, sRég As String)
            sNom = sNomTop
            sCodeSource = sCodSrc
            sNomDépartement = sDpt
            sNomRégion = sRég
        End Sub
        Public Sub New(sNomTop As String, sCodSrc As String, sDpt As String, sRég As String, sPay As String)
            sNom = sNomTop
            sCodeSource = sCodSrc
            sNomDépartement = sDpt
            sNomRégion = sRég
            sNomPays = sPay
        End Sub
        Public Sub New(sNomTop As String, sCodSrc As String, sDpt As String, sRég As String, sPay As String, sLat As String, sLon As String)
            sNom = sNomTop
            sCodeSource = sCodSrc
            sNomDépartement = sDpt
            sNomRégion = sRég
            sNomPays = sPay
            oCoordonnéesGPS.sLatitude = sLat
            oCoordonnéesGPS.sLongitude = sLon
        End Sub
     
        Public Property oErreur() As New Erreur
        Public Property bAncienne() As Boolean
        Public Property bUtilisé() As Boolean
        Public Property sArrondissement() As String
        Public Property sCanton() As String
        Public Property sCodeDépartement() As String
        Public Property sCodePays() As String
        Public Property sCodePostal() As String
        Public Property sCodeSource() As String
        Public Property sCodeGéographique() As String
        Public Property sDéfOriginal() As String
        Public Property sDéfTrouvé() As String
        Public Property sIndex() As String
        Public Property oCoordonnéesGPS As New CoordonnéesGPS
        Public Property oCoordonnéesGPS2 As New CoordonnéesGPS
        Public Property sMRC() As String
        Public Property sNom() As String
        Public Property sAncienNoms() As New SortedList(Of Integer, String)
        Public Property sNomDépartement() As String
        Public Property sNomNote() As String
        Public Property sNomPays() As String
        Public Property sNomRégion() As String
        Public Property sN0Région() As String
        Public Property sProvince() As String
        Public Property sCodeProvince() As String
        Public Property sTag_Ged() As String
        Public Property sAbrégé As String
        Public Property sSubdivision() As String
        Public Property numLigne As Long
    End Class
    Avec la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim sNomRég As String = "Rhône-Alpes"
    Dim sNomTo As String = "Chambery"
    i = CommunesSource.IndexOfValue((From oTo As Toponyme In CommunesSource.Values
                                                                         Where oTo.sNomRégion = sNomRég AndAlso oTo.sNom = sNomTo).FirstOrDefault)
    Me permet de trouver la première occurence
    Mais comme faire pour trouver les suivantes si il y en a (ce qui n'est pas la cas dans l'exemple donné)

    Merci

    Bernard

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Donc pour en revenir à nos moutons :

    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
     
       Try   
                Dim one As New Toponyme("Chambery", "", "", "Rhône-Alpes", "France", "", "")
                CommunesSource.Add("One", one)
                Dim two As New Toponyme("Chambery", "", "", "Rhône-Alpes", "France", "", "")
                CommunesSource.Add("Two", two)
                Dim three As New Toponyme("Chambery", "", "", "Rhône", "France", "", "")
                CommunesSource.Add("Three", three)
                Dim four As New Toponyme("Chamb", "", "", "Rhône-Alpes", "France", "", "")
                CommunesSource.Add("Four", four)
     
                'For Each t In CommunesSource
                '    MsgBox(t.Value.sNom)
                'Next
     
                Dim sNomRég As String = "Rhône-Alpes"
                Dim sNomTo As String = "Chambery"
     
                Dim ToExtract = CommunesSource.Where(Function(f) f.Value.sNomRégion = sNomRég AndAlso f.Value.sNom = sNomTo)
     
                For Each t In ToExtract
                   'Retourne l'index de chaque objet qui possède les critères de requête (sNomRég et sNomTo)
                    MsgBox(t.Key)
                Next
     
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
    Je ne sais pas quelle genre de valeur de type String te permets d'indexer ta sortedList CommunesSource alors j'ai un peu fais au pif !
    Ne connaissant pas les tenants et les aboutissants de ton projet : ta classe Toponyme me semble tout de même bizarre, n'y aurait-il pas moyen de faire un peu d'héritage pour éviter ces moultes surcharges de constructeur ou alors définir chaque argument dans la signature d'un seul constructeur en Optional Byval :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Public Sub New(Optional Byval sNomTop$ = "",Optional Byval sCodSrc$ = "", Optional Byval sDpt$ = "", Optional Byval sRég$ = "", Optional Byval sPay$ = "", Optional Byval sLat$ = "", Optional Byval sLon$ = "")
            sNom = sNomTop
            sCodeSource = sCodSrc
            sNomDépartement = sDpt
            sNomRégion = sRég
            sNomPays = sPay
            oCoordonnéesGPS.sLatitude = sLat
            oCoordonnéesGPS.sLongitude = sLon
        End Sub
    PS : Ce n'est qu'une suggestion car je ne connais pas le fonctionnement de ton projet et comme je l'ai fais ci-dessus j'ai affecté certains argument et pas d'autres ce qui compromet la mise en place d'un unique constructeur !

    A+

  5. #5
    Invité
    Invité(e)
    Par défaut
    CommunesSource.Add("One", New Toponyme("Chambery", "", "", "Rhône-Alpes", "France", "", ""))La multiplication des constructeurs, bien qu'ils complique la lisibilité du Code, est totalement confirme dans la mesure ou il ce trouve univoque pour le compilateur!

    Et de surcroît c'est a la concept qu'il ne faut pas ce mélanger les pinceaux, c'est transparent pour l'utilisateur de la classe.


    Personnellement j'opterai pour un seule avec de paramètres optionnel.

    Il n'est pas utile d'utiliser un objet temporaire pour alimenter la collection, vu qu'il est possible d'atteindre la partie public de chaque instance!
    Dernière modification par Invité ; 18/04/2016 à 07h35.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut
    Bonjour à tous et merci!
    Bernard

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

Discussions similaires

  1. recherche dans une listbox
    Par micknic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/02/2005, 21h39
  2. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 13h56
  3. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12
  4. Problème de recherche dans une BD
    Par ledevelopeur dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/04/2004, 09h49
  5. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10

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