C# 如何检查重叠范围?
C# How can I check overlapping ranges?
我在数据库中有以下范围。我正在尝试检查编辑现有记录时是否存在重叠范围。
范围如下
我使用以下代码检查重叠范围。
var allRanges = await _dlRangesService.GetAllRanges();
var isOverlapping = allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeStart && rangeToUpdate.RangeStart <= r.RangeEnd && rangeToUpdate.ID != r.ID) ||
allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeEnd && rangeToUpdate.RangeEnd <= r.RangeEnd && rangeToUpdate.ID != r.ID);
我在保存时通过验证添加了以下条件
if (isOverlapping)
ModelState.AddModelError("Range", "Range overlaps with existing Range.");
但是当我将上面图片中的第一个范围 10000 - 10000
编辑为 10000 - 22000
时,它允许我保存。
我也尝试了以下方法,在这种情况下,即使数据库中没有重叠范围,它也不会让我保存更改。但它可以创造新记录。
var allRanges = await _dlRangesService.GetAllRanges();
var isOverlapping = allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeStart && rangeToUpdate.RangeStart <= r.RangeEnd) ||
allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeEnd && rangeToUpdate.RangeEnd <= r.RangeEnd);
有什么帮助吗?
以下重叠范围的可能性;
1)
[ existing range ]
[ modified range ]
2)
[ existing range ]
[ modified range ]
3)
[ existing range ]
[ modified range ]
4)
[ existing range ]
[ modified range ]
您的测试未处理案例 4。
而不是测试一个范围是否包含另一个范围的开始或结束。您需要测试这两种情况是否为真;
1)
... range 1 ]
[ range 2 ...
2)
[ range 1 ...
... range 2 ]
例如;
r.RangeStart <= rangeToUpdate.RangeEnd
&& r.RangeEnd >= rangeToUpdate.RangeStart
我在数据库中有以下范围。我正在尝试检查编辑现有记录时是否存在重叠范围。
范围如下
我使用以下代码检查重叠范围。
var allRanges = await _dlRangesService.GetAllRanges();
var isOverlapping = allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeStart && rangeToUpdate.RangeStart <= r.RangeEnd && rangeToUpdate.ID != r.ID) ||
allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeEnd && rangeToUpdate.RangeEnd <= r.RangeEnd && rangeToUpdate.ID != r.ID);
我在保存时通过验证添加了以下条件
if (isOverlapping)
ModelState.AddModelError("Range", "Range overlaps with existing Range.");
但是当我将上面图片中的第一个范围 10000 - 10000
编辑为 10000 - 22000
时,它允许我保存。
我也尝试了以下方法,在这种情况下,即使数据库中没有重叠范围,它也不会让我保存更改。但它可以创造新记录。
var allRanges = await _dlRangesService.GetAllRanges();
var isOverlapping = allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeStart && rangeToUpdate.RangeStart <= r.RangeEnd) ||
allRanges.Any(r => r.RangeStart <= rangeToUpdate.RangeEnd && rangeToUpdate.RangeEnd <= r.RangeEnd);
有什么帮助吗?
以下重叠范围的可能性;
1)
[ existing range ]
[ modified range ]
2)
[ existing range ]
[ modified range ]
3)
[ existing range ]
[ modified range ]
4)
[ existing range ]
[ modified range ]
您的测试未处理案例 4。
而不是测试一个范围是否包含另一个范围的开始或结束。您需要测试这两种情况是否为真;
1)
... range 1 ]
[ range 2 ...
2)
[ range 1 ...
... range 2 ]
例如;
r.RangeStart <= rangeToUpdate.RangeEnd
&& r.RangeEnd >= rangeToUpdate.RangeStart