我有List<Holiday>
个假期,其中包含以下属性:
另一方面,我有以下代码在当前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日是本周。
感谢任何帮助。感谢
答案 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的期望)不同,因为我们根本不需要创建一周中所有日期的列表。在大多数情况下,它还需要较少的比较,因此在重要的情况下可能会更快。