通过vb.net中的不同对象属性多次对自定义对象列表进行排序

时间:2014-08-05 17:27:59

标签: vb.net list sorting

我想按多个对象属性对自定义对象列表进行排序。

例如,我有:

MyObject.A
MyObject.B
MyObject.C

我想首先按属性“A”的值,然后按B然后按C对列表进行排序。所有这些属性都是字符串(可能相同也可能不相同,可能包含也可能不包含/包含数字字符)。

在浏览网页后,我发现something适用于我只需要按一个属性对列表进行排序的情况(在此示例中为“A”):

MyList.Sort(Function(x, y) x.A.CompareTo(y.A))

这很好。

所以在那之后,我想我只需要按照正确的顺序做更多种类,我尝试做这样的事情:

MyList.Sort(Function(x, y) x.C.CompareTo(y.C))
MyList.Sort(Function(x, y) x.B.CompareTo(y.B))
MyList.Sort(Function(x, y) x.A.CompareTo(y.A))

哪种有时有效,有时无效。如果列表条目很少(< 10),则它工作正常,例如,如果“A”值相等,则列表按“B”值排序,如果它们相等,则按“C”排序。 但是,当我添加更多条目时,它会崩溃,只有最后一种排序是正确的。 似乎每个下一个排序都不保留它不需要排序的条目的原始顺序。

我该如何排序?

1 个答案:

答案 0 :(得分:5)

MyList = (MyList.OrderBy(Function(i) i.A).
                 ThenBy(Function(i) i.B).
                 ThenBy(Function(i) i.C)).ToList()

至于为什么你现有的方法不起作用:那就是difference between a stable and an unstable sortAccording to MSDN,Sort()方法不稳定