You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何用Linq筛选含可空DateOnly的Range列表?

筛选指定日期区间内的Range对象

针对你的Range类(end为可空类型,代表开放区间),可以通过Where()方法结合对end的空值判断完成筛选,核心是区分**闭合区间(end有值)和开放区间(end为null)**两种场景,以下分两种常见需求给出实现:

需求1:筛选完全包含在[from, to]内的Range

即Range的所有日期范围都落在指定区间内,此时开放区间(无结束日期)无法满足该条件,筛选逻辑为:

  • Range的起始日期begin不早于指定区间的from
  • Range的结束日期end必须有值,且不晚于指定区间的to

代码实现:

DateOnly targetFrom = /* 你的目标起始日期 */;
DateOnly targetTo = /* 你的目标结束日期 */;

var fullyContainedRanges = yourRangeList.Where(range =>
    range.begin >= targetFrom &&
    range.end.HasValue &&
    range.end.Value <= targetTo);

需求2:筛选与[from, to]存在交集的Range

即Range和指定区间只要有重叠部分就保留,这是更常用的场景,筛选逻辑为:

  • 若为开放区间(end为null):只要Range的起始日期begin不晚于指定区间的to,就存在交集
  • 若为闭合区间(end有值):需满足Range的起始日期不晚于指定区间的to,且Range的结束日期不早于指定区间的from

代码实现:

DateOnly targetFrom = /* 你的目标起始日期 */;
DateOnly targetTo = /* 你的目标结束日期 */;

var overlappingRanges = yourRangeList.Where(range =>
    (!range.end.HasValue && range.begin <= targetTo) ||
    (range.end.HasValue && range.begin <= targetTo && range.end.Value >= targetFrom));

内容的提问来源于stack exchange,提问作者L. Kvri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:47:07