c# linq获取日期范围在选定星期内的记录

本文关键字:记录 获取 linq 取日期 范围 | 更新日期: 2023-09-27 18:12:04

我有一个List<Holiday>假期,具有以下属性:

  • HolidayId
  • StartDate可以
  • EndDate

另一方面,我有以下代码生成当前周中的所有日期:

 int days = currentDate.DayOfWeek - DayOfWeek.Sunday;
 DateTime dtTemp = currentDate.AddDays(-days);
 weekDays.Add(dtTemp);
 // add all dates within the current week
 weekDays.AddRange(new DateTime[] {
     dtTemp.AddDays(1), dtTemp.AddDays(2), dtTemp.AddDays(3), dtTemp.AddDays(4), dtTemp.AddDays(5), dtTemp.AddDays(6)
 });

现在,我需要过滤我的List<Holiday>,以便我只得到那些在当前星期中有天数的记录。

例如:

当前星期:7月6日至7月12日

节假日1:StartDate =' 2014-07-10', EndDate='2014-07-22'

上面的Holiday即使EndDate不在当前的星期范围内,也有一些日子会在当前的日期中,所以我应该得到那个记录。

当前星期:7月6日至7月12日

节假日2:StartDate =' 2014-07-04', EndDate='2014-07-06'

我也应该得到这个记录,因为7月6日在本周。

感谢任何帮助。由于

c# linq获取日期范围在选定星期内的记录

holidays.Where(h=>weekDays.Any(w=>h.StartDate >= w && h.EndDate <= w))
int days = currentDate.DayOfWeek - DayOfWeek.Sunday;
DateTime weekStart = currentDate.AddDays(-days);
DateTime weekEnd = weekStart.AddDays(6);
return holidays.Where(h=>h.StartDate <= weekEnd && h.EndDate >= weekStart);

这与AD不同。Net的解决方案(和OPs的期望),因为我们根本不需要创建一周中所有日期的列表。在大多数情况下,它还需要更少的比较,因此在重要的情况下,它可以更快。