按日期编号筛选日期列表

本文关键字:日期 列表 筛选 编号 | 更新日期: 2023-09-27 18:15:56

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

日历最初将包含指定范围内的所有日期,例如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语句:)

许多谢谢,

亚历克斯

按日期编号筛选日期列表

DateTime.DaysInMonth来救援!

return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()
};
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()