所以
我有几个案例需要解决:我设法涵盖了其中几个案例,但是有一个案例对我来说仍然很模糊。
接受标准为:
示例:
我有第一个这样的时期:
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);
}
答案 0 :(得分:1)
因此,如果结束日期为空,那么它实际上是开放式的,对吗?如果是这样,那么您真正需要检查的是匹配期间是在条目的开始日期之后是第一个日期还是结束日期,而没有结束日期。因为开始日期之后的所有内容都会自动发生冲突。