【问题标题】:Advice on best practice for checking record falling between multiple dates关于检查多个日期之间记录的最佳实践的建议
【发布时间】:2011-02-01 11:06:35
【问题描述】:

我正在寻找最有效的伪代码以实现以下条件:

  • 我有一个“事件”,它有开始日期和结束日期(S1、S2)
  • 我正在尝试找出这是否发生在特定时间范围内(D1、D2)
  • 如果活动只持续一天,则没有结束日期
  • 我只希望在查询中出现一次事件。

如果有人能够帮助处理此类查询背后的伪代码,我将不胜感激。

它用于 LINQ 查询。

【问题讨论】:

  • 如果可能,尝试将日期转换为数字 - 会使比较快得多。您可以转换为 unix 时间或 yyyymmddhhmm 格式,然后使用 >= 和
  • LINQ to 什么?为什么要在查询中只使用一次事件?
  • "如果活动只持续一天,则没有结束日期。"嗯,当然会。它不会永远持续下去。除非这可能是国会正在做的事情。

标签: sql asp.net-mvc linq pseudocode


【解决方案1】:

如果将 (S1, S2) 定义为 (S1, S2?? S1) 那么

满足以下条件:

  S2 >= D1 && D2 >= S1




        S1     S2
        |------|  
D1                     D2
|-----------------------|

            S1                  S2
            |-------------------|  
    D1                     D2
    |-----------------------|

    S1                  S2
    |-------------------|  
              D1                       D2
              |-----------------------|


    S1                        S2
    |-------------------------|  
              D1      D2
              |-------|

但是这些条件不满足:

        S1                  S2
        |-------------------|  
D1  D2
|----|

S1   S2
|-----|  
          D1                       D2
          |-----------------------|

【讨论】:

    【解决方案2】:

    要检查事件是否超过特定时间范围,请使用

    Event.Start < TimeFrame.End && (Event.End == null) ? Event.Start.AddDays(1) : Event.End > TimeFrame.Start
    

    【讨论】:

    • 我试过了,但收到以下错误:System.Data.Entity.dll 中发生“System.NotSupportedException”类型的异常,但未在用户代码中处理其他信息:LINQ to Entities 确实无法识别方法 'System.DateTime AddDays(Double)' 方法,并且此方法无法转换为商店表达式。从 db.Events 中的 objEvent 返回其中 ((objEvent.StartDate >= d1 && objEvent.StartDate = DateTime.Now) && (objEvent.EventType1.Tag == eventtype)...
    • EntityFunctions.AddDays(Event.Start, 1)
    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多