1
votes

OrderByDescending ne trie pas correctement la liste

UPDATE:

J'ai dû affecter la liste de retour Linq à la variable 'columnData':

if(sortOrder == 1)
        {
            columnData.OrderBy(s => s);
        }
        else
        {
            columnData.OrderByDescending(s => s);
        }

J'ai des problèmes avec OrderByDescending pour trier une liste de chaînes simple. Si j'utilise .Sort () puis .Reverse (), cela fonctionne correctement puisque j'ai lu que .Sort () se trie naturellement mais la pratique consistant à utiliser .Reverse () pour l'ordre décroissant est une mauvaise pratique dans le code de production. Donc je le fais comme ceci:

columnData = columnData.OrderBy(s => s).ToList();

Mais ce que j'obtiens après une montée ou une descente est ceci:

 entrez la description de l'image ici

Mais si j'utilise Sort () et Reverse (), ça trie correctement.

Quel est le problème avec le tri Linq?


2 commentaires

quel type d'objet columnData est?


@Disappointed a mis à jour mes questions. C'est une liste de chaînes.


3 Réponses :


1
votes
    if (sortOrder == 1)
    {
        columnData = columnData.OrderBy(s => s);//.ToList();
    }
    else
    {
        columnData = columnData.OrderByDescending(s => s);//.ToList();
    }

0 commentaires

2
votes

OrderBy ne modifie pas la valeur de la liste. Il renvoie une nouvelle collection ordonnée, ce que vous devez faire est:

    if(sortOrder == 1)
    {
        columnData = columnData.OrderBy(s => s).ToList();
    }
    else
    {
        columnData = columnData.OrderByDescending(s => s).ToList();
    }


0 commentaires

1
votes

Vous n'utilisez pas la valeur renvoyée de OrderBy () ou OrderByDescending () . Comme indiqué dans LINQ documentation , les méthodes retournent un System.Linq.IOrderedEnumerable .


0 commentaires