Heim >Backend-Entwicklung >C++ >Wie kann ich einen benutzerdefinierten IComparer verwenden, um Objekte in LINQ OrderBy korrekt zu sortieren?
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
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!