3

我正在尝试按天数过滤日历(日期列表),但正在为特定场景而苦苦挣扎!

日历最初将包含指定范围内的所有日期,例如 2013 年 1 月 31 日 - 2015 年 1 月 31 日。我想过滤此列表以仅包含与日历中的第一天数匹配的日期,例如,如果日历是 25,返回的新过滤日历将是:

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

... ETC

第一个示例使用 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 日

... ETC

实现这一目标的最佳方法是什么?星期三早上它在啄我的大脑!

我希望答案是一个完美的单行 LINQ 语句:)

非常感谢,

亚历克斯

4

2 回答 2

1
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()
于 2013-05-29T10:03:07.307 回答
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 回答