2012-03-29 21 views
1

私にはIEnumerable<DateTime>があります。私は、現在のカレンダー月に発生したすべての日付と、次の11カ月のすべての日付を渡しても、その日付を引き出​​したいと思います。最新のものから始まる月ごとにグループ化された日付を表示します。たとえば、次のように現在の暦月と今後11ヵ月の日付を取得する

現在の日 - 2012年3月12日

  • 2012年3月
    • 3月3日 - イベント1
    • 3月15日 - イベント2
    • 3月30日 - イベント3
  • ...
  • ...
  • ...
  • 2013年2月には
    • 2月3日 - イベント156
    • 2月13日 - イベント157
    • 2月20日 - イベント158

私はすでに行う方法を知ってグループ分け。 linqとC#を使って日付をフィルタリングする方法は?

+6

質問がありましたか? –

+0

IEnumerableに含まれる内容を表示するとどうなりますか? – JotaBe

+0

正確に何が問題になっていますか?イベントを含むかどうかのグループ化または条件ですか? –

答えて

3

何かこれはうまくいくはずです。最初に合法的な日付範囲を決定し、その範囲外の日付を除外し、最後に月単位でグループ化します。

私はあなたがそれを微調整する必要がある場合があり、手で次のコードを書いた:

var acceptableFirstDate = DateTime.Today; 
if (DateTime.Today.Day > 1) 
{ 
    acceptableFirstDate = DateTime.Today.AddDays(-DateTime.Today.Day + 1); 
} 
var acceptableLastDate = acceptableFirstDate.AddMonths(12).AddDays(-1); 

var result = dates 
    .Where(x => x >= acceptableFirstDate && x <= acceptableLastDate) 
    .GroupBy(x => x.Month); 

私はこれが役に立てば幸い!

+0

これは1つのことを除いてうまくいきました。私は行番号6を "var acceptableLastDate = acceptableFirstDate.AddMonths(12).AddDays(-1)"にする必要があります。私の例では、2013年3月1日ではなく、2月28日を最終日としたいと考えています。 – skeletank

+0

いいね!そして、あなたは大歓迎です! –

関連する問題