如何用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
相关产品推荐
相关产品推荐

