繁体   English   中英

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

[英]C# linq get records where date range is in a selected week

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

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

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

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM