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

如何用C# LINQ结合日期范围与选中星期几过滤数据

实现C#按日期范围和选中星期几过滤数据

首先定义用户选中的星期几集合,比如要筛选周一和周二:

// 示例:选中周一、周二
List<DayOfWeek> selectedWeekDays = new List<DayOfWeek> { DayOfWeek.Monday, DayOfWeek.Tuesday };

然后修改原有的过滤表达式,添加星期几的判断逻辑:

Expression<Func<Task, bool>> filterPredicate = s => 
    s.Active && !s.Deleted && 
    s.StartDateTime != null && s.EndDateTime != null &&
    s.StartDateTime >= startDate && s.StartDateTime <= endDate &&
    (selectedWeekDays.Count == 0 || selectedWeekDays.Contains(s.StartDateTime.Value.DayOfWeek));

逻辑说明

  • 保留原有日期范围和状态(Active、未Deleted)的过滤条件
  • 新增的星期几判断逻辑:
    • 若选中的星期几集合为空,这部分条件自动成立,不影响原有过滤效果
    • 若集合不为空,仅保留StartDateTime对应的星期几在选中集合内的数据

适配整数表示的星期几

如果你的业务中星期几用整数(比如1=周一、7=周日)表示,可调整为以下写法:

// 示例:选中周一(1)、周二(2)
List<int> selectedWeekDayNumbers = new List<int> { 1, 2 };

Expression<Func<Task, bool>> filterPredicate = s => 
    s.Active && !s.Deleted && 
    s.StartDateTime != null && s.EndDateTime != null &&
    s.StartDateTime >= startDate && s.StartDateTime <= endDate &&
    (selectedWeekDayNumbers.Count == 0 || selectedWeekDayNumbers.Contains((int)s.StartDateTime.Value.DayOfWeek));
// 注:DayOfWeek枚举中Monday对应1,Sunday对应0;若你的业务中1代表周日,需转换:(int)s.StartDateTime.Value.DayOfWeek == 0 ? 7 : (int)s.StartDateTime.Value.DayOfWeek

内容的提问来源于stack exchange,提问作者T_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:05:33