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

Framework .NET Discussion :

List Sort/OrderBy via un string?


Sujet :

Framework .NET

  1. #1
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut List Sort/OrderBy via un string?
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Personne
    {
    string Nom {get;set};
    string Prenom{get;set};
    int Age{get;set}
    Personne Enfant {get;set};
    }
    J'ai une List<Personne> listPersonnes

    Je n'ai pas de problème quand je dois la trier sur un champs spécifique
    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listPersonnes.OrderBy(p=>p.Nom);
    Mais maintenant je dois trier cette liste dynamiquement, par exemple "Age,Nom" ou "Nom,Prenom,Enfant.Age" mais je ne vois pas bien comment faire

    Si vous avez des idées pour me mettre sur la voie

    Merci
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    faut utiliser la fonction ThenBy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listPersonnes.OrderBy(p=>p.Age).ThenBy(p=>p.Nom);

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par athilla Voir le message
    Bonjour,

    faut utiliser la fonction ThenBy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listPersonnes.OrderBy(p=>p.Age).ThenBy(p=>p.Nom);
    Le ThenBy j'ai du cherché mais je l'avais trouvé
    Part contre moi je veux trier ma liste via un string et non en l'hard-codant
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  4. #4
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut,
    il suffit d'écrire ton compareur, tel que décrit par la documentation.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Suffit

    Même avec un comparer je vois mal comment faire
    1) Il ne passe pas d'argument au comparer mais appelle un comparer différent

    2) Je vois mal comment créer le comparer si je recois en parametre
    "Age,Nom" ou "Nom,Prénom"
    Dans les comparers que j'ai vu c'est des comparateurs simple :
    On compare l'Age puis si égale on compare le Nom mais l'ordre de comparaison est toujours statique et non dynamique.
    Donc si je veux trier sur:
    Age,Nom je dois crée un comparer
    Nom,Age un 2ème comparer
    Nom,Prénom un 3eme...
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Le plus simple c'est d'utiliser Dynamic Linq

    Sinon, une autre option est de créer dynamiquement les delegates qui vont faire le tri, mais c'est nettement plus complexe...

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Oki je vais aller regarder ca

    Merci
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  8. #8
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Suffit

    Même avec un comparer je vois mal comment faire
    1) Il ne passe pas d'argument au comparer mais appelle un comparer différent

    2) Je vois mal comment créer le comparer si je recois en parametre
    "Age,Nom" ou "Nom,Prénom"
    Dans les comparers que j'ai vu c'est des comparateurs simple :
    On compare l'Age puis si égale on compare le Nom mais l'ordre de comparaison est toujours statique et non dynamique.
    Donc si je veux trier sur:
    Age,Nom je dois crée un comparer
    Nom,Age un 2ème comparer
    Nom,Prénom un 3eme...
    Tu manques d'imagination
    un compareur c'est juste une classe, dans l'exemple ils l'instancient sur l'appel, mais rien ne t'oblige à faire de même.
    Dans l'exemple ils utilisent un constructeur par défaut, mais rien ne t'oblige à faire de même.
    Dans l'exemple le code de comparaison est simple, mais rien ne t'oblige à faire de même.

    Tu peux faire une classe de comparaison typée avec "Personne" dont le constructeur accepte une string de format genre "{Age},{Nom},{Prenom}", dans la méthode de comparaison tu replace les {...} par les valeurs avant de faire un string.Compare.
    Et voila.

    Maintenant, je ne connais pas Dynamic Linq, probable que ce soit plus simple.

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    L'imagination c'est pas mon fort, surtout quand il s'agit de réinventé la roue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string myorderby = "personne.Nom,personne.Age"
    var sortedList = from personne in listePersonnes
                          orderby myorderby;
    Merci à tous
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

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

Discussions similaires

  1. Liste de Fichiers via une date
    Par gudulle dans le forum VB.NET
    Réponses: 1
    Dernier message: 13/09/2007, 18h08
  2. Appel fonction via un string
    Par Veovis dans le forum C++
    Réponses: 17
    Dernier message: 06/02/2007, 09h45
  3. gerer une liste de fenetre via un JMenu
    Par lilou77 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/02/2007, 11h40
  4. utilisation de list::sort() ?
    Par kitsune dans le forum SL & STL
    Réponses: 8
    Dernier message: 05/11/2006, 12h47
  5. Réponses: 5
    Dernier message: 11/05/2006, 19h20

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