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 :

Requête linq orderby


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut Requête linq orderby
    Bonjour,

    Je viens vers vous pour un soucis au niveau d'une requête linq.
    Je souhaite trier une liste d'objet. Pour cela j'utilise la requête linq suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vote.ProjetVotes = (from proj in vote.ProjetVotes
                               orderby proj.Ordre ascending
                               select proj).ToList();
    Le problème est que mes objets ne sont pas correctement triés.

    Si quelqu'un voit d'où vient le problème.

    Merci.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 116
    Par défaut
    Bonjour,

    Si je ne dit pas de bêtise, le order by doit venir après la requête, et ensuite spécifie le champ sur lequel s'applique le order by :

    essaye de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    vote.ProjetVotes = (from proj in vote.ProjetVotes
                               select proj).OrderByAscending(item => item.tonChamp).ToList();

  3. #3
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut
    Merci pour ta réponse,

    Cependant, le problème reste le même. De plus, je n'ai accès que au OrderByDescending et non Ascending.

  4. #4
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    A priori, ProjetVotes est une List<T> (avec T une classe perso)
    Si cette classe n'implémente pas IComparable<T> (ou tout du moins son champ Ordre étant donné que c'est lui le critère de tri) il va être difficile d'obtenir un tri pertinent.

    Par contre je ne comprends pas bien pourquoi tu te sers de Linq dans ce cas précis, tu as une List tu veux la trier et la réaffecter à la source d'origine ; autant utiliser une surcharge de List<T>.Sort (soit sans argument si le T de la liste est comparable soit par exemple la surcharge prenant un Comparison<T> te permettant ainsi de faire une lambda spécifiant comment trier)

    Exemple (illustratif) en supposant que Ordre soit un String et qu'un Ordre vient avant un autre si la longueur de la chaine est plus courte [basé sur l'exemple de la doc sans la gestion des null]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vote.ProjetVotes.Sort ((x, y) => x.Length.CompareTo (y.Length));
    Cordialement !

  5. #5
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Citation Envoyé par Pynouz Voir le message
    Je souhaite trier une liste d'objet. Pour cela j'utilise la requête linq suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vote.ProjetVotes = (from proj in vote.ProjetVotes
                               orderby proj.Ordre ascending
                               select proj).ToList();
    Le problème est que mes objets ne sont pas correctement triés.
    Je ne vois pas de problème au niveau de la syntaxe. Ce qui m'amène à te poser cette question: de quel type est ton attribut Ordre? string? int? ....

  6. #6
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut
    Olalala !

    Effectivement, j'avais mis mon attribut "Ordre" en string d'où l'erreur de tri.

    J'ai voulu aller trop vite et du coup j'ai un peu honte maintenant .

    Merci pour ton aide j'aurais bloqué un moment sinon je le sens !

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

Discussions similaires

  1. Requête linq jointure
    Par oyigit dans le forum Linq
    Réponses: 5
    Dernier message: 18/03/2010, 16h02
  2. Réponses: 7
    Dernier message: 06/04/2009, 16h29
  3. Colle sur un tri dans une requête linq to sql
    Par boby62423 dans le forum Linq
    Réponses: 5
    Dernier message: 18/03/2009, 10h01
  4. Linq, OrderBy sur propriété hors base de donnée
    Par neptune dans le forum Framework .NET
    Réponses: 7
    Dernier message: 25/06/2008, 10h05
  5. Réponses: 7
    Dernier message: 10/02/2008, 11h56

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