为了简化我的问题,我将举例说明。
假设我有一个包含objects
和datetime
属性的integer
列表。
我首先按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,但结果仍然相同。
知道为什么这不起作用?或者我做错了什么?
答案 0 :(得分:2)
解决方法:如果您对时间不感兴趣,请将关键选择器更改为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
不是0的Time
值。
通过将密钥选择器更改为v => v.DateValue.Date
来确认。