本文中,我们将探讨如何利用自定义 IComparer
所呈现的场景涉及一个通用列表,其中包含 InvoiceNumber 属性格式为“200906/1”的对象。目标是根据考虑 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;
最后,确保排序list 反映在绑定列表中,更新的 items 集合必须分配给 Items 属性:
this.Items = items;
以上是如何使用自定义 IComparer 和 LINQ OrderBy 对列表进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!