C#linq获取日期范围在选定周内的记录

时间:2014-07-08 16:31:45

标签: c# linq linq-to-objects

我有List<Holiday>个假期,其中包含以下属性:

  • 节假日ID
  • 开始日期
  • 结束日期

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

 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 =&#39; 2014-07-10&#39;,EndDate =&#39; 2014-07-22&#39;

上述假期即使EndDate超出当前周范围,也会有当天的日期,所以我应该获得该记录。

  

当前周:7月6日至7月12日

     

假日2:StartDate =&#39; 2014-07-04&#39;,EndDate =&#39; 2014-07-06&#39;

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

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:4)

holidays.Where(h=>weekDays.Any(w=>h.StartDate >= w && h.EndDate <= w))

答案 1 :(得分:1)

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的解决方案(和OP的期望)不同,因为我们根本不需要创建一周中所有日期的列表。在大多数情况下,它还需要较少的比较,因此在重要的情况下可能会更快。