如何检查日期范围是否为空的重叠日期

时间:2019-02-08 18:10:10

标签: c# .net linq date ienumerable

所以

我有几个案例需要解决:我设法涵盖了其中几个案例,但是有一个案例对我来说仍然很模糊。

接受标准为:

  1. 只需一个日期,结束日期为空值(选中
  2. 检查输入的期间是否已经存在(从有效期到有效期)(已选中
  3. 检查开始日期是否小于结束日期(已选中
  4. 检查输入的期间是否与结束日期的空字段重叠(未选中

示例:

我有第一个这样的时期:

period | start date | end date
first    2/1/2018      null

我想验证这种情况为无效,因为它与第一种情况重叠

period | start date | end date
second   11/16/2017    2/2/2018

到目前为止,这里已编写代码:

public (bool, string) IsValid(long someId, Numbers number, bool ignoreNumber = false)
{
    var reportQuery = QueryOver.Of<Numbers >()
        .Where(r => r.Some.ID == someId);
    var values = this.Find(reportQuery);

    // check if entered number already exists
    if (!ignoreNumber )
    {
        if(values.Any(x=>x.Number == number.Number && x.ID != number.ID))
        {
            return (false, General.ExistValidation.ToString());
        }
    }

    // check if entered valid from is empty
    var df = Convert.ToDateTime(number.ValidFrom);
    var dateFrom = df.ToShortDateString();
    if (dateFrom == "1/1/0001")
    {
        return (false, General.EnterValidFor.ToString());
    }

    // if there is already null value for end date then return validation error
    // only one null value for valid to can exist
    if(! number.EndDate.HasValue && values.Any(x => !x.EndDate.HasValue && x.ID != number.ID))
    {
        return (false, General.NumberValidFromValidation.ToString());
    }


    // check if entered period for number already exists (StarDate to EndDate) 
    if (number.StarDate .HasValue && values.Any(x => x.StarDate <= number.EndDate&& number.StarDate <= x.EndDate&& x.ID != number.ID))
    {
        return (false, General.NumberDatesValidation.ToString());
    }

    // this is not valid I want to return error if user enters values that overlaps with 
    if (number.StarDate .HasValue && values.Any(x=>x.EndDate== null && x.StarDate <= num.StarDate ))
    {

    }

    // check if stardate is greater than end date
    if (number.StarDate >= number.EndDate)
    {
        return (false, General.StageDatesCheck.ToString());
    }

    return (true, string.Empty);
}

1 个答案:

答案 0 :(得分:1)

因此,如果结束日期为空,那么它实际上是开放式的,对吗?如果是这样,那么您真正需要检查的是匹配期间是在条目的开始日期之后是第一个日期还是结束日期,而没有结束日期。因为开始日期之后的所有内容都会自动发生冲突。