【问题标题】:C# linq get records where date range is in a selected weekC# linq 获取日期范围在选定周内的记录
【发布时间】:2014-07-08 16:31:44
【问题描述】:

我有一个 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 日。

感谢任何帮助。谢谢

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:
    holidays.Where(h=>weekDays.Any(w=>h.StartDate >= w && h.EndDate <= w))
    

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多