この記事では、カスタム IComparer
提示されたシナリオには、「200906/1」という形式の InvoiceNumber プロパティを持つオブジェクトを含む汎用リストが含まれます。目標は、InvoiceNumber プロパティ内の数値を考慮するカスタム並べ替えロジックに従ってこのリストを並べ替えることです。
最初に、カスタム IComparer
修正された MyComparer 実装は以下に提供されます。
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()); } // Note: do error checking and consider i18n issues too :) if (valueA[0] == valueB[0]) { return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1])); } else { return int.Parse(valueA[0]).CompareTo(int.Parse(valueB[0])); } } }
ApplySortCore MyComparer:
case ListSortDirection.Ascending: MyComparer comparer = new MyComparer(); items = items.OrderByDescending( x => property.GetValue(x), comparer).ToList(); break;
最後に、ソートされたリストが確実に反映されるようにメソッドが変更されました。バインドされたリストでは、更新された項目コレクションを Items プロパティに割り当てる必要があります:
this.Items = items;
以上がLINQ OrderBy でカスタム IComparer を使用してリストを並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。