Heim > Backend-Entwicklung > C++ > Wie kann ich einen benutzerdefinierten IComparer verwenden, um Objekte in LINQ OrderBy korrekt zu sortieren?

Wie kann ich einen benutzerdefinierten IComparer verwenden, um Objekte in LINQ OrderBy korrekt zu sortieren?

Barbara Streisand
Freigeben: 2025-01-02 17:44:08
Original
712 Leute haben es durchsucht

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

Benutzerdefinierten IComparer verwenden für Linq OrderBy

Problem:

Sie haben eine Liste von Objekten mit einer Eigenschaft, die Rechnungsnummern in einem bestimmten Zeichenfolgenformat enthält, z. B. 200906/1. Die Standardsortierung von Linq OrderBy in C# führt zu einer unerwünschten Sortierreihenfolge, z. B. 200906/1, 200906/10, 200906/11.

Lösung:

To Um Ihre eigene benutzerdefinierte Sortierreihenfolge zu implementieren, können Sie einen IComparer Schnittstellenimplementierung. Hier ist eine Beispielimplementierung:

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);
        }
    }
}
Nach dem Login kopieren

In Ihrem ursprünglichen Code haben Sie versucht, Ihren MyComparer in Linq OrderBy wie folgt zu verwenden:

items = items.OrderByDescending(
  x => property.GetValue(x), comparer).ToList();
Nach dem Login kopieren

Dieser Ansatz ist falsch. Die korrekte Syntax für die Verwendung Ihres Vergleichers lautet:

items = items.OrderBy(x => property.GetValue(x), comparer).ToList();
Nach dem Login kopieren

Beachten Sie, dass die OrderBy-Methode anstelle von OrderByDescending verwendet wird, wenn Sie in aufsteigender Reihenfolge sortieren möchten.

Abschließend sollten Sie dies nicht vergessen Weisen Sie die sortierten Elemente wieder Ihrer Datenquelle zu, um die Änderungen in Ihrer Benutzeroberfläche widerzuspiegeln:

this.Items = items;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich einen benutzerdefinierten IComparer verwenden, um Objekte in LINQ OrderBy korrekt zu sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage