3

カレンダー (日付のリスト) を日番号でフィルタリングしようとしていますが、特定のシナリオで苦労しています!

カレンダーには最初、2013 年 1 月 31 日から 2015 年 1 月 31 日など、指定された範囲のすべての日付が含まれます。このリストをフィルター処理して、カレンダーの最初の日の番号に一致する日付のみを含めたいと思います。カレンダーが 25 の場合、返される新しいフィルター済みカレンダーは次のようになります。

  • 2013年2月25日
  • 2013年3月25日
  • 2013年4月25日

...など

この最初の例は、LINQ を使用すると十分に単純です。

var calendar = ...code to get calendar from DB.

//Get Day Number of First Entry in Calendar (31st for example)
int day = calendar.Dates.Select(d => d.Date.Day).First();

//Filter the rest of the calendar by this date.
return new Calendar
{
    Dates = calendar.Dates.Where(c => c.Date.Day == day).ToList()
};

たとえば、31 を渡すと問題が発生します。私の要件は、これが返されるようにすることです。

  • 2013年1月31日
  • 2013年2月28日
  • 2013年4月30日
  • 2013 年 5 月 31 日

...など

これを達成するための最良の方法は何ですか?水曜日の朝、脳をつついている!

可能であれば、答えが完璧なワンライナーLINQステートメントになることを望みます:)

どうもありがとう、

アレックス

4

2 に答える 2

1

DateTime.DaysInMonth救助へ!

return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()
};
于 2013-05-29T10:03:59.343 に答える