2012-03-29 159 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

您有問題嗎? – 2012-03-29 13:16:30

+0

如果顯示IEnumerable包含什麼,該怎麼辦? – JotaBe 2012-03-29 13:19:48

+0

你到底有什麼麻煩?是否包含事件的分組或條件? – 2012-03-29 13:25:54

回答

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

除了一件事外,這工作得很好。我需要讓行號6爲「var acceptableLastDate = acceptableFirstDate.AddMonths(12).AddDays(-1)」。在我的例子中,我想2013年2月28日作爲我的最後一天,而不是2013年3月1日。非常感謝您的幫助! – skeletank 2012-03-29 13:40:21

+0

不錯的一個!不客氣! – 2012-03-29 14:28:13