[英]C# linq get records where date range is in a selected week
我有一个List<Holiday>
假期,它具有以下属性:
另一方面,我有以下代码生成当前每周的所有日期:
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'
上面的假期,即使EndDate超出当前星期范围,在当前日期也将有几天,因此我应该获得该记录。
当前星期:7月6日至7月12日
假日2:StartDate ='2014-07-04',EndDate ='2014-07-06'
我也应该获得该记录,因为7月6日是当前一周。
感谢任何帮助。 谢谢
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的解决方案(以及OP的期望)不同,因为我们根本不需要创建一周中所有天的列表。 在大多数情况下,它还需要较少的比较,因此在重要的情况下,它可能会更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.