所以我有一个包含名为myNumber的属性的类。它看起来像这样:
public class MyThing
{
public int name{ get; set; }
public string myNumber{ get; set; }
}
myNumber中包含的值可能如下12-24
或12-024
。
我想通过myNumber降序来订购这些对象的集合(IEnumerable<MyThing> myCollection
),但我不知道如何去做。
我试过myCollection.OrderByDescending(f => f.myNumber)
,但这并不是我所期待的。我希望12-22, 13-01, 12-030
能够像这样订购:
13-01
12-030
12-22
答案 0 :(得分: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);
Demo以及您想要的结果。
答案 1 :(得分: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的目的是什么。