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 :

Sort d'une collection d'objets contenant chacun une collection


Sujet :

Linq

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Par défaut Sort d'une collection d'objets contenant chacun une collection
    Bonjour,

    Désolé pour le titre, je suis pas certain que ce soit clair. J'en suis même sûr...
    Mais je vais tenter de clarifier la chose.

    J'ai une collection A contient des objets de type ItemA.
    Chaque ItemA contient une collection B contenant des objets de type ItemB.

    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
    public class A : List<ItemA>
    {
    }
     
    public class ItemA
    {
        private string mCaption;
        private B ListB = new B();
    }
     
    public class B: List<ItemB>
    {
    }
     
    public class ItemB
    {
        private string mType;
    }


    Je souhaiterais pourvoir faire un sort de ma collection A en Linq sur une propriété de l'objet ItemB.

    Est-ce possible ? Avez vous besoin que j'apporte d'autres explications ?

    Merci pour votre aide.

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Si je ne me trompe pas, la solution la plus simple serait d'implémenter l'interface IComparer au niveau de la classe ItemA.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class ItemA : System.Collections.IComparer
    {
        public int Compare(object x, object y)
        {
     
        }
    }
    Ainsi, tu aurais toute la flexibilité pour comparer comme bon te semble deux listes de ItemB.

    De cette façon, tu pourras écrire la requête Linq suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var query = myList.OrderBy(item => item);
    Plus d'information sur l'interface IComparer : http://msdn.microsoft.com/fr-be/libr...icomparer.aspx

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Par défaut
    Merci pour votre réponse.

    J'ai commencé le .net il y a un an et je ne connais pas du tout l'interface IComparer et bien que clairement expliqué, j'essaie d'en comprendre l'intérêt

    Je précise juste que je n'ai pas deux listes distinctes, mais seulement une List<> A qui contient une propriété B de type ListB <ItemB>
    Je souhaite trier uniquement A sur la propriété Type de l'objet ItemB.

    Je me demande encore même si c'est logique et faisable.
    Pour vous dire le chemin qu'il me reste à faire...

    Je retourne lire la doc

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par seblo_scoqi Voir le message
    Merci pour votre réponse.

    J'ai commencé le .net il y a un an et je ne connais pas du tout l'interface IComparer et bien que clairement expliqué, j'essaie d'en comprendre l'intérêt

    Je précise juste que je n'ai pas deux listes distinctes, mais seulement une List<> A qui contient une propriété B de type ListB <ItemB>
    Je souhaite trier uniquement A sur la propriété Type de l'objet ItemB.

    Je me demande encore même si c'est logique et faisable.
    Pour vous dire le chemin qu'il me reste à faire...

    Je retourne lire la doc
    Le orderby peut comparer automatiquement des types dits primitifs tel que int, short, float, decimal, etc mais aussi string. Par contre, dans le cas de type custom, telle qu'une classe développée par un développeur, il est impossible pour le framework de faire une comparaison intelligente.

    C'est là que l'interface IComparer devient intéressante car tu vas pouvoir définir le définir l'implémentation de la comparaison entre deux objets d'un type que tu as défini, exemple ItemA.

    Donc si je reprends ta méthode Compare de tout à l'heure, tu vas pouvoir faire la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public int Compare(object x, object y)
    {
         ItemA itemaX = (ItemA)x;
         ItemA itemaY = (ItemA)y;
     
         // ainsi tu peux accéder à la sous liste des ItemB des deux classe en cours de comparaison
         // itemaX.ListB
         // itemaY.ListB
     
         // et renvoyer 1, 0 ou -1 suivant ce que ton "algo" de comparaison a déterminé
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Par défaut
    Merci beaucoup pour ces explications... Je vais essayer.

    Pour expliciter mon problème de façon plus concrète.

    J'ai une liste de catalogue (list<> a) avec plusieurs propriétés, nom, date de creation (...) et une propriété (list<> b) qui contient tous les types de ce catalogue. Par exemple le catalogue "logitech" peut contenir les types "accessoires, périphériques,...".

    Et sur un listing des catalogues, il est intéressant de pouvoir les trier par type...

    Bien entendu, cette propriété Type est dynamique et varie largement selon les catalogues(...)

    Je voulais juste remettre mon besoin dans son contexte

    Merci encore pour ton aide.

  6. #6
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par seblo_scoqi Voir le message
    Merci beaucoup pour ces explications... Je vais essayer.

    Pour expliciter mon problème de façon plus concrète.

    J'ai une liste de catalogue (list<> a) avec plusieurs propriétés, nom, date de creation (...) et une propriété (list<> b) qui contient tous les types de ce catalogue. Par exemple le catalogue "logitech" peut contenir les types "accessoires, périphériques,...".

    Et sur un listing des catalogues, il est intéressant de pouvoir les trier par type...

    Bien entendu, cette propriété Type est dynamique et varie largement selon les catalogues(...)

    Je voulais juste remettre mon besoin dans son contexte

    Merci encore pour ton aide.
    Ma réponse a répondu à ta question ?
    J'ai l'impression que tu es toujours dans le flou

Discussions similaires

  1. Comment binder à un DataGrid une collection d'objets accessible par une clé
    Par zoaax dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 14/01/2011, 11h00
  2. Réponses: 2
    Dernier message: 07/10/2008, 13h17
  3. Réponses: 2
    Dernier message: 29/05/2008, 15h59
  4. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11

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