如何检查重叠的日期范围,如果有一个空值

问题描述 投票:-1回答:1

所以,

我有几种情况需要被覆盖:我已经成功地覆盖几个人,但一个情况下仍然谜给我。

验收标准是:

  1. 需要有只有一个日期与结束日期空值(选中)
  2. 检查是否进入周期已经存在(有效期自到到有效)(选中)
  3. 检查是否STARTDATE比结束日期的情况下(选中)
  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);
}
c# .net linq date ienumerable
1个回答
1
投票

所以,如果结束日期为空,那么它的有效开放式的,正确的呢?如果是这样,那么你真的需要检查一个匹配的周期是否已没有结束日期的条目的开始日期后第一或结束日期。由于开始日期后任何事情会自动发生冲突。

© www.soinside.com 2019 - 2024. All rights reserved.