如何通过Linq筛选跨两个月daterange中的已完成月度数据?
筛选给定日期范围内已完成的月度数据
正确筛选逻辑
要得到目标结果,需同时满足两个条件:
- 月度的结束日期不早于给定daterange的起始日期(排除daterange开始前已完成的月度)
- 月度的结束日期不晚于给定daterange的结束日期(排除daterange结束后才会完成的月度)
修正后的Linq查询代码
假设请求参数中包含DateRangeStart(对应2023-05-15)和DateRangeEnd(对应2023-06-15),代码如下:
var completedMonthsInRange = new QueryFactory() .Period .Where(x => x.Enddate >= request.DateRangeStart && x.Enddate <= request.DateRangeEnd);
原代码问题分析
你之前的代码仅判断x.Enddate <= request.ReferenceDate,若ReferenceDate是daterange的结束日期,会将所有结束日期早于等于该日期的月度(第1-8行)全部选出,无法排除daterange开始前就已完成的月度(第1-7行),因此不符合需求。
结果验证
针对你的数据集,上述查询会精准筛选出第8行数据(2023-05-01 至 2023-05-31):
- 该月度的结束日期2023-05-31落在daterange [2023-05-15, 2023-06-15] 区间内,满足已完成且在目标范围内的要求
- 第1-7行结束日期早于2023-05-15,第9-10行结束日期晚于2023-06-15,均被排除
内容的提问来源于stack exchange,提问作者Mernayi
相关产品推荐
相关产品推荐

