我看到一些行为很难理解。给定一个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/

10-09 09:29