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
725 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!

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