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
Barbara StreisandOriginal
2025-01-02 17:44:08694Durchsuche

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);
        }
    }
}

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();

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

items = items.OrderBy(x => property.GetValue(x), comparer).ToList();

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;

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!

Stellungnahme:
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