我在資料庫中有以下范圍。我正在嘗試檢查編輯現有記錄是否存在重疊范圍。
范圍如下所示

我使用以下代碼檢查重疊范圍。
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);
有什么幫助嗎?
uj5u.com熱心網友回復:
重疊范圍的以下可能性;
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/422478.html
標籤:
