新的开始日期和新的结束日期不应位于开始日期和结束日期的现有列表中

时间:2014-11-06 14:29:45

标签: c# linq date datetime

IList<ExchangeSupplyData> chkDuplicate = context.ExchangeSupplyForecast
                                                .select(i => i.RASchedulingPeriodID == schedulingPeriodId 
                                                && i.RADlHdrID == record.DealNumberId 
                                                && i.ProductClassID == record.ProductTypeId 
                                                && i.SchedulingSubregionID == record.SubRegionId)

chkDuplicate将具有预测的交换供应的开始和结束日期。当使用相同的schedulingPeriodId,DealNumberId,ProductTypeId,SubRegionId添加新预测时,新的开始日期和结束日期不应该在现有预测的开始和结束日期范围内。如果统计和结束日期匹配或在现有记录的范围内,那么我应该返回一个bool来停止插入记录。

如何在C#或LINQ中验证?有人可以帮我解决这个问题吗?

例如,如果我们有两个预测

首次预测的开始日期:2014年11月1日,结束日期:2014年11月7日。

第二次预测的开始日期:2014年11月8日,结束日期:2014年11月17日。

然后如果我尝试添加新预测,则开始日期或结束日期不应该在2014年11月1日至2014年11月17日的日期范围内

1 个答案:

答案 0 :(得分:1)

您必须检查新日期是否与任何现有项目重叠。

如果你想用Linq来做,那就是这样的:

var isAnyItemOverlapped = context.ExchangeSupplyForecast
          .Any(x => (x.StartDate >= newStartDate && x.EndDate <= newEndDate) || (x.StartDate <= newStartDate && x.EndDate >= newEndDate);

(请根据您的对象模型进行调整)