【发布时间】:2013-05-30 05:23:20
【问题描述】:
我看到一些我很难理解的行为。给定DateTimes 的列表,我只想按降序选择过去一年中出现的日期。但是使用OrderBy()、OrderByDescending() 和SkipWhile() 的行为……很奇怪。给定从今天开始的列表,包括过去 100 个月,如下所示:
List<DateTime> ldt = new List<DateTime>();
for (int i = 0; i < 100; i++)
{
ldt.Add(DateTime.Now.AddMonths(-i));
}
我从以下代码开始:
ldt = ldt.OrderByDescending(date => date).
SkipWhile(date => date <= DateTime.Now.AddYears(-1)).ToList();
这会正确排序列表,但不会跳过任何记录。所以为了好玩,我尝试了这个(跳过比今天更早的所有内容,即所有内容):
ldt = ldt.OrderByDescending(date => date).
SkipWhile(date => date <= DateTime.Now).ToList();
哪个有效。该列表为空。然后我尝试了以下方法(OrderBy 而不是 OrderByDescending):
ldt = ldt.OrderBy(date => date).
SkipWhile(date => date <= DateTime.Now.AddYears(-1)).ToList();
这完全符合预期 - 列表已排序,日期已正确过滤。所以最终的结果是:
ldt = ldt.OrderBy(date => date).
SkipWhile(date => date <= DateTime.Now.AddYears(-1)).ToList();
ldt = ldt.OrderByDescending(date => date).ToList();
跳过,然后重新排序。那么我错过了什么?为什么其中一些有效,而另一些则以不可预知的方式中断?我正在尝试做的正确一行命令是什么?
【问题讨论】: