理解に苦しむいくつかの動作が見られます。s のリストをDateTime
指定して、過去 1 年間に発生した日付のみを降順で選択したいと考えています。でも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();
どちらが機能します。リストが空です。次に、次のことを試しました(OrderByDescendingではなくOrderBy):
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();
スキップしてから再注文します。それで、私は何が欠けていますか?これらのいくつかはなぜ機能し、いくつかは予測できない方法で壊れるのでしょうか? 私がやろうとしていることに対する適切な1 行のコマンドは何ですか?