C# 如果有空值,如何检查重叠的日期范围
所以 我有几个案例需要涵盖:我已经设法涵盖了其中的几个案例,但有一个案例对我来说仍然模糊不清 验收标准为: 检查结束日期时,只需要一个日期的值为空 检查输入的期间是否已存在有效期从到有效期到已检查 检查开始日期是否小于检查的结束日期 检查输入的期间是否与结束日期的空字段重叠未选中 例如: 我的第一节课是这样的:C# 如果有空值,如何检查重叠的日期范围,c#,.net,linq,date,ienumerable,C#,.net,Linq,Date,Ienumerable,所以 我有几个案例需要涵盖:我已经设法涵盖了其中的几个案例,但有一个案例对我来说仍然模糊不清 验收标准为: 检查结束日期时,只需要一个日期的值为空 检查输入的期间是否已存在有效期从到有效期到已检查 检查开始日期是否小于检查的结束日期 检查输入的期间是否与结束日期的空字段重叠未选中 例如: 我的第一节课是这样的: period | start date | end date first 2/1/2018 null 我想确认这个案例是无效的,因为它和第一个案例重叠 period |
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);
}
所以,如果结束日期为空,那么它实际上是开放的,对吗?如果是这样,那么您真正需要检查的就是匹配的期间是否在条目的开始日期之后有第一个日期或结束日期,而没有结束日期。因为在开始日期之后的任何事情都会自动发生冲突。到目前为止编写的代码-有什么问题吗?嗯,我不明白…sry。你能再解释一下吗