- 在阅读问题时请耐心等待,因为我发现这个问题有点难以解释。
- 请建议一个更好的标题,以便它可以帮助社区中的其他人。
醇>
我有3个字段。即
答案 0 :(得分:2)
我为你创造了一个小提琴here
我建议您也进行客户端验证。 我假设你的日期列表是有序的,所以开始和结束日期的第i个元素将代表ith间隔,所以
中的某些内容 //Checking to make sure all effective dates have end date, except the last one.
for (var i = 1; i < effectiveEndDates.Count; i++)
{
if (!effectiveEndDates[i - 1].HasValue)
{
result = "cannot have a previous billing address without and end date.";
}
}
//Ensure all the startDates Dates are on or after the next end Date
//This solution will work if the effective dates are in order.
for (var i = 1; i < effectiveStartDates.Count; i++)
{
var effectiveEndDate = effectiveEndDates[i - 1];
if (effectiveEndDate != null && effectiveEndDate.Value > effectiveStartDates[i])
{
result = "cannot have 2 active billing address.";
}
}
只要日期在订单中(如生效日期),就可以完成。希望这有帮助
更新:我更新了小提琴以确保没有任何重叠与无限范围。 [检查](https://dotnetfiddle.net/nmyA3P)
答案 1 :(得分:1)
您需要检查日期范围是否重叠。这里有一个很好的答案:Determine Whether Two Date Ranges Overlap
基本上,
(StartA <= EndB) and (EndA >= StartB)
您可以在C#中将DateTime对象与&lt; =和&gt; =进行比较。
正如SadiRubaiyet在评论中提到的那样,如果你按开始日期排序每个人的地址会使事情变得更快,因为这意味着你只需要将每个日期范围与下一个日期范围进行比较。
如果没有订购,则必须将每个日期范围与该人的每个其他地址进行比较。