如何检查值是否在 IList 的范围内

问题描述

我有以下代码返回 IList<>

var productCodes = await ProductsService.GetAllProductsAsync();

我的模型:

public int ProductStartCode { get; set; }
public int ProducEndCode { get; set; }

创建新的产品代码范围时,我想检查新代码是否与现有产品代码重叠

我的产品代码如下所示:

 ProductStartCode  ProductEndCode 
   100001            100003
   100004            100008
   100009            100011

我需要检查我想要完成的事情,

For example if I enter: 100001,100002,100003 are overlapping since they in between 100001 & 100002 range,100004,100005,100006,100007,100008 are also overlapping since they in between 100004 & 100008 range,

解决方法

给定一个范围列表,以及一个检查重叠的可能范围,看看可能范围的开始或结束是否在列表中的任何范围之间:

var isOverlapping = productCodes.Any(p => p.ProductStartCode <= possibleStartCode && possibleStartCode <= p.ProductEndCode) ||
                    productCodes.Any(p => p.ProductStartCode <= possibleEndCode && possibleEndCode <= p.ProductEndCode);