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 :

Comparaison sur une liste contenu dans une classe d'objet [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut Comparaison sur une liste contenu dans une classe d'objet
    Bonjour

    J'essaie d'obtenir tous les objets d'une classe dont la structure possède une liste de string qui est identique... Bon avec le code se sera plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        class MyClass
        {
            private Int64 _iId;
            private string _sText;
            private List<string> _sLs;
         }
    j'ai donc un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         List<MyClass> lstAll = new List<MyClass>();
    et j'ai ajouté des élément à cette liste... exemple :
    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
         lstAll[0].iID = 122
         lstAll[0].sText="coucou"
         lstAll[0].sLs[0]="A"
         lstAll[0].sLs[1]="B"
         lstAll[0].sLs[2]="C"
     
         lstAll[1].iID = 123
         lstAll[1].sText="hi"
         lstAll[1].sLs[0]="A"
         lstAll[1].sLs[1]="B2"
         lstAll[1].sLs[2]="C2"
         lstAll[1].sLs[3]="A"
     
         lstAll[2].iID = 124
         lstAll[2].sText="salut"
         lstAll[2].sLs[0]="A"
         lstAll[2].sLs[1]="B"
         lstAll[2].sLs[2]="C"
     
         lstAll[3].iID = 125
         lstAll[3].sText="bonjour"
         lstAll[3].sLs[0]="A"
         lstAll[3].sLs[1]="C4"
    Donc, voici le noeud du problème :

    Je voudrais obtenir via une requete linq ou autre méthode pour avoir tous la liste des objets qui possède par exemple leur list<sting> pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         lstAll[x].sLs[0]="A"
         lstAll[x].sLs[1]="B"
         lstAll[x].sLs[2]="C"
    donc obtenir comme resultat un objet List<MyClass> lstResult avec les objets 0 et 2...

    Navré si ça parait évident mais je maitrise pas assez le langage....
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Un simple GroupBy devrait faire le job:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstAll.GroupBy(x => string.Join("", x._sLs))
    Ca devrait regrouper les objets ayant des structures identiques.

    Après tu peux avoir des subtilités si les chaines peuvent être vides "" mais si ce n'est pas le cas ça devrait être bon.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Me suis peut être mal expliqué

    La liste _sLs est contenue dans ma classe MyClass que j'ai instancié par un objet lstAll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<MyClass> lstAll = new List<MyClass>();
    Je souhaite récupérer tout les éléments de l'objet lstAll dont j'ai _sLS pour des valeurs précises
    comme ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         lstAll[x].sLs[0]="A"
         lstAll[x].sLs[1]="B"
         lstAll[x].sLs[2]="C"
    donc le résultat doit être du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        List<MyClass> lstResult = ..... ;
    où j'aurais 2 objets uniquement le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         lstResult [0].iID = 122
         lstResult [0].sText="coucou"
         lstResult [0].sLs[0]="A"
         lstResult [0].sLs[1]="B"
         lstResult [0].sLs[2]="C"
     
         lstResult [1].iID = 124
         lstResult [1].sText="salut"
         lstResult [1].sLs[0]="A"
         lstResult [1].sLs[1]="B"
         lstResult [1].sLs[2]="C"
    Merci d'avance pour votre aide :-)

  4. #4
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Si tu es sûr de n'en avoir qu'un alors ça devrait donner quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<MyClass> lstResult = lstAll.GroupBy(x => string.Join("", x._sLs)).Single(g => g.Count() != 1).ToList();
    (pas testé mais l'idée est là.)
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    Si tu es sûr de n'en avoir qu'un alors ça devrait donner quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<MyClass> lstResult = lstAll.GroupBy(x => string.Join("", x._sLs)).Single(g => g.Count() != 1).ToList();
    (pas testé mais l'idée est là.)
    Okay, mais comment précise tu que tu veux avoir que celles qui possède "A", "B" et "C" et pas les autres.... qui d'ailleurs peuvent être null ou plus nombreuses.

  6. #6
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Si tu connais à l'avance la séquence c'est encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string expectedSequence = ...;
     
    List<MyClass> lstResult = lstAll.Where(x => string.Join("", x._sLs).Equals(expectedSequence)).ToList();
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    Si tu connais à l'avance la séquence c'est encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string expectedSequence = ...;
     
    List<MyClass> lstResult = lstAll.Where(x => string.Join("", x._sLs).Equals(expectedSequence)).ToList();
    Sauf que c'est pas pour expectedSequence un string mais un List<string>

  8. #8
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Dans ce cas il faut une petite étape en plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<string> expectedSequence = ...;
     
    string expectedSequenceAsString = string.Join("", expectedSequence);
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    Dans ce cas il faut une petite étape en plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<string> expectedSequence = ...;
     
    string expectedSequenceAsString = string.Join("", expectedSequence);
    Ok, merci pour tno aide... j'ai juste ajouter des array pour le join soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string expectedSequenceAsString = string.Join("", expectedSequence.toArray());
    Mais le résultat est là, j'ai juste aussi gérer le cas où on a des null ou des valeurs "" pour la partie expectedSequence

    Un grand merci à toi pour ton aide et pour le temps passé :-)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/03/2011, 15h33
  2. Réponses: 8
    Dernier message: 23/06/2010, 11h21
  3. Réponses: 18
    Dernier message: 03/07/2009, 15h19
  4. modifier une liste contenue dans une liste
    Par harris_macken dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/03/2008, 16h52
  5. acceder à une liste contenue dans une liste
    Par CPI_en_mousse dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 12/06/2007, 08h33

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