C# 按天数筛选日期列表

C# 按天数筛选日期列表,c#,linq,datetime,calendar,C#,Linq,Datetime,Calendar,我正在尝试按天数筛选日历(日期列表),但在特定场景中遇到了困难 日历最初将包含指定范围内的所有日期,例如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

我正在尝试按天数筛选日历(日期列表),但在特定场景中遇到了困难

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

您能提供将要使用的年份吗?因此,您不希望日期为
31
而是任何月份的最后一天?也许这个方法会有帮助:
bool islastfmonth(DateTime date){return date==new DateTime(date.Year,date.Month,1)。AddMonths(1)。AddDays(-1);}
(未经测试)预筛选的日历最有可能包含跨越3-5年的日期范围,比如说2012-2015年,所有日期都在这之间。这回答了你的问题吗?不完全是,但我忘了DateTime.Year。接听来电@Corak-是的,谢谢,也许这和原始代码的组合可以工作。我来看看我能不能把东西弄碎。他有一天的时间,然后他要么用这个数字,要么在这个月的最后一天太大。就快到了,但还不完全到-1.
return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()
};