Ich habe eine generischeVerwenden eigene IComparer <T> mit Linq SortiertNach
List<MyClass>
wo MyClass
eine Eigenschaft hat InvoiceNumber
die Werte wie enthält:
200906/1
200906/2
..
200906/10
200906/11
200906/12
ist meine Liste zu einem
BindingList<T>
gebunden, die mit Linq Sortierung unterstützt:
protected override void ApplySortCore(
PropertyDescriptor property, ListSortDirection direction)
{
_sortProperty = property;
_sortDirection = direction;
var items = this.Items;
switch (direction)
{
case ListSortDirection.Ascending:
items = items.OrderByDescending(x => property.GetValue(x)).ToList();
break;
case ListSortDirection.Descending:
items = items.OrderByDescending(x => property.GetValue(x)).ToList();
break;
}
this.Items = items;
}
jedoch die Standardvergleich Sorten wie folgt aus (wie angenommen):
200906/1
200906/10
200906/11
200906/1 2
200906/2
das ist in diesem Fall unangenehm.
Jetzt möchte ich meine eigenen IComparer<T>
mit diesem verwenden. Es sieht wie folgt aus:
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 String.Compare(stringA.ToString(), stringB.ToString());
if (valueA[0] == valueB[0])
{
return String.Compare(valueA[1], valueB[1]);
}
else
{
return String.Compare(valueA[0], valueB[0]);
}
}
}
und änderte den ApplySortCore
Code, dies zu verwenden IComparer
:
case ListSortDirection.Ascending:
MyComparer comparer = new MyComparer();
items = items.OrderByDescending(
x => property.GetValue(x), comparer).ToList();
break;
Wenn ich meinen Code debuggen, ich sehe, dass MyComparer.Compare(object, object)
mehrere Male und gibt die richtigen Werte genannt (- 1, 0, 1) für eine Vergleichsmethode.
Aber meine Liste ist immer noch die "falsche" Art und Weise sortiert. Fehle ich etwas? Ich habe keine Ahnung.
Sorry, ich den Code gekürzt ein bisschen. In meinem ursprünglichen Code tue ich das. Items = Einzelteile; (Wenn es nicht sowieso nicht sortieren würde) Aber int Umwandlung funktioniert (ich muss blind gewesen sein || dumm, das zu verpassen). Sehr viel. –