我看到一些行为很难理解。给定一个DateTime
列表,我只想选择降序排列在过去一年中的日期。但是使用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();
跳过,然后重新排序。那我想念什么呢?为什么其中一些有效,而有些却无法预测?我要执行的正确的单行命令是什么?
最佳答案
我只想选择过去一年中发生的日期
代替使用SkipWhile
,您应该可以使用.Where
:
ldt = ldt.Where(date => date.> DateTime.Now.AddYears(-1))
.OrderByDescending(date => date).ToList();
关于c# - OrderBy [降序]()和SkipWhile()的异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16824031/