1

所以我有一个类,其中包含一个名为 myNumber 的属性。它看起来像这样:

public class MyThing
{
    public int name{ get; set; }
    public string myNumber{ get; set; }
}

myNumber 中包含的值可能如下所示12-2412-024

我想IEnumerable<MyThing> myCollection按 myNumber 降序订购这些对象的集合(),但我不知道如何去做。

我试过myCollection.OrderByDescending(f => f.myNumber)了,但它并不完全符合我的预期。我希望12-22, 13-01, 12-030像这样订购:

13-01 
12-030
12-22
4

2 回答 2

2

您可以像订购它一样订购它Version。因此,您可以拆分'-'并使用第一部分作为主要版本,最后一部分作为次要版本:

var orderedLikeVersion = myCollection
    .Select(t => new
    {
        Thing = t,
        Parts = t.myNumber.Split('-')
    }).Select(x => new
    {
        x.Thing,
        Version = new Version(int.Parse(x.Parts[0]), int.Parse(x.Parts[1]))
    })
    .OrderByDescending(x => x.Version)
    .Select(x => x.Thing);

演示您想要的结果。

于 2013-01-09T22:02:24.900 回答
0

我猜你有这个订单?

13-01 
12-22
12-030

按照字母约定,这将是正确的。12-2* 大于 12-0*,因为 2 在 0 之后。

按照数字约定,这似乎也是正确的,因为 22 也大于 03,并且 2 大于 0。

所以我不确定您的预期顺序,为什么您将 12-030 解释为大于 12-22?连字符后的部分是否应该允许截断前导零?如果你这样做了,那么 12-30 将等于 12-030,我会问自己,前导 0 的目的是什么。

于 2013-01-09T21:59:36.013 回答