Maison > développement back-end > C++ > Comment puis-je utiliser un IComparer personnalisé pour trier correctement les objets dans LINQ OrderBy ?

Comment puis-je utiliser un IComparer personnalisé pour trier correctement les objets dans LINQ OrderBy ?

Barbara Streisand
Libérer: 2025-01-02 17:44:08
original
699 Les gens l'ont consulté

How Can I Use a Custom IComparer to Correctly Sort Objects in LINQ OrderBy?

Utilisation d'IComparer pour Linq OrderBy

Problème :

Vous disposez d'une liste d'objets avec une propriété contenant des numéros de facture dans un format de chaîne spécifique, par exemple, 200906/1. Le tri par défaut de Linq OrderBy en C# entraîne un ordre de tri indésirable, tel que 200906/1, 200906/10, 200906/11.

Solution :

À implémentez votre propre ordre de tri personnalisé, vous pouvez définir un IComparer mise en œuvre des interfaces. Voici un exemple d'implémentation :

public class MyComparer : IComparer<Object>
{
    public int Compare(Object stringA, Object stringB)
    {
        string[] valueA = stringA.ToString().Split('/');
        string[] valueB = stringB.ToString().Split('/');

        if (valueA.Length != 2 || valueB.Length != 2)
        {
            return stringA.ToString().CompareTo(stringB.ToString());
        }

        // Parse numbers for comparison
        int numA = int.Parse(valueA[0]);
        int numB = int.Parse(valueB[0]);
        if (numA == numB) 
        {
            return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        }
        else
        {
            return numA.CompareTo(numB);
        }
    }
}
Copier après la connexion

Dans votre code d'origine, vous avez tenté d'utiliser votre MyComparer dans Linq OrderBy comme suit :

items = items.OrderByDescending(
  x => property.GetValue(x), comparer).ToList();
Copier après la connexion

Cette approche est incorrecte. La syntaxe correcte pour utiliser votre comparateur est :

items = items.OrderBy(x => property.GetValue(x), comparer).ToList();
Copier après la connexion

Notez que la méthode OrderBy est utilisée à la place de OrderByDescending si vous souhaitez trier par ordre croissant.

Enfin, n'oubliez pas de réattribuez les éléments triés à votre source de données pour refléter les modifications apportées à votre interface utilisateur :

this.Items = items;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal