如何编写Lambda表达式获取两个指定日期范围内的对应数据
Lambda日期范围筛选实现方案
首先确认你的Client实体中存在需要做范围筛选的日期字段,比如业务单据日期、注册日期等,下文以BusinessDate代指该字段,你可以替换为你实际的字段名。
代码实现
你可以在DistinctBy操作之前增加Where条件,同时处理日期范围和ID筛选需求,示例代码如下:
// 1. 筛选单个指定ClientID的场景,假设目标ID存储在变量targetClientId中 data = ClientsRepo.GetAllClients() .Where(x => // 日期范围筛选,兼容可空日期未赋值的场景 (!startDateInit.HasValue || x.BusinessDate >= startDateInit.Value) && (!endDateInit.HasValue || x.BusinessDate <= endDateInit.Value) // ID筛选逻辑 && x.ClientID == targetClientId ) .DistinctBy(x => x.ClientID) .ToList(); // 2. 筛选多个指定ID的场景,假设目标ID列表存储在变量targetClientIds(List<int>类型)中 data = ClientsRepo.GetAllClients() .Where(x => (!startDateInit.HasValue || x.BusinessDate >= startDateInit.Value) && (!endDateInit.HasValue || x.BusinessDate <= endDateInit.Value) && targetClientIds.Contains(x.ClientID) ) .DistinctBy(x => x.ClientID) .ToList();
注意事项
- 先执行筛选再做去重,相比先去重再筛选性能更高,避免对无用数据做去重运算
- 如果
GetAllClients()底层是EF Core等ORM实现,直接拉取全表再筛选会造成不必要的数据库IO开销,建议把上述Where条件直接迁移到ORM的查询逻辑中,让筛选操作在数据库层面执行 - 如果你的日期字段是带时区的,注意和前端传入的
startDateInit、endDateInit时区保持一致,避免出现日期筛选偏差
内容的提问来源于stack exchange,提问作者jacky
相关产品推荐
相关产品推荐

