对泛型列表进行排序无法按预期工作
本文关键字:工作 排序 泛型 列表 | 更新日期: 2023-09-27 17:56:57
为了简化我的问题,我将举一个例子。假设我有一个包含datetime
和integer
属性的objects
列表。我首先按datetime
字段排序列表项,然后按integer
属性排序。
Item # Date Value Int Value
1 2012-01-01 0
2 2012-01-01 4
3 2012-01-01 6
4 2012-01-01 13
假设我的list
中有这 4 个项目(一开始是无序的,上面是我最终想要的样子)。
我只是通过以下方式订购它们:
myList = myList.OrderBy(v=>v.MyDateValue).ThenBy(v=>v.MyIntValue).ToList();
执行上面的行后,它结束如下:
Item # Date Value Int Value
1 2012-01-01 0
4 2012-01-01 13
2 2012-01-01 4
3 2012-01-01 6
起初我认为它将我的int
值解释为一个string
(可能不是一个合乎逻辑的陈述,只是对此进行了相当长的一段时间),然后我将int
值更改为 10,11,12,13,但结果仍然相同。
知道为什么这不起作用吗?还是我做错了什么?
解决方案:如果您对时间不感兴趣,请将您的键选择器更改为 v => v.DateValue.Date
。
我无法复制您描述的行为。以下工作按预期工作:
private class Foo
{
public DateTime Date { get; set; }
public int Id { get; set; }
}
static void Main(string[] args)
{
var myList = new List<Foo>
{
new Foo {Date = new DateTime(2012, 01, 01), Id = 12},
new Foo {Date = new DateTime(2012, 01, 01), Id = 1},
new Foo {Date = new DateTime(2012, 01, 03), Id = 7},
new Foo {Date = new DateTime(2012, 01, 01), Id = 4},
};
var newList = myList.OrderBy(v => v.Date).ThenBy(v => v.Id).ToList();
foreach (var f in newList)
{
Console.WriteLine("{0}, {1}", f.Date, f.Id);
}
Console.ReadLine();
}
输出项顺序为 1、4、12 和 7。(7 是最后一个,因为它的日期更晚。
我怀疑您有DateTime
Time
不为 0 的值。
通过将密钥选择器更改为 v => v.DateValue.Date
来验证这一点。