如何获取在linq中的日期范围内有效的项目
How to get items that were effective within a date range in linq
我有 table 个实体制造的项目,我需要查询。
每个项目都有两个属性:Id 和 EffectiveDate
我需要一个日期范围内所有有效项目的列表。
这是我目前拥有的:
var monthStart = new DateTime(2019, 10, 1);
var monthEnd = new DateTime(2019, 10, 31);
var items = dbContext.Items
.OrderByDescending(a => a.EffectiveDate)
.where(m => m.EffectiveDate <= monthEnd && m.EffectiveDate > monthStart)
这得到了所有正确的项目,除了一个。它需要获取所有有效日期在期间和开始日期之前的最后一个项目。
现在它获取所有有效日期在该期间内的项目。
有没有办法在单个查询中执行此操作?
例如
我们有具有这些生效日期的项目 (DD/MM/YYYY):
- 2000 年 5 月 5 日
- 2005 年 7 月 1 日
- 2019 年 7 月 8 日
- 12/07/2019
- 15/07/2019
- 15/08/2019
我想要在 01/07/2019 和 31/07/2019 之间有效的项目,结果将是:
- 2005 年 7 月 1 日
- 2019 年 7 月 8 日
- 12/07/2019
- 15/07/2019
您可以像这样将您的列表与另一个子查询连接起来:
var monthStart = new DateTime(2019, 10, 1);
var monthEnd = new DateTime(2019, 10, 31);
var items = dbContext.Items
.OrderByDescending(a => a.EffectiveDate)
.Where(m => m.EffectiveDate <= monthEnd && m.EffectiveDate > monthStart)
.Concat(dbContext.Items.Where(d => d.EffectiveDate < monthStart).TakeLast(1))
我有 table 个实体制造的项目,我需要查询。
每个项目都有两个属性:Id 和 EffectiveDate
我需要一个日期范围内所有有效项目的列表。
这是我目前拥有的:
var monthStart = new DateTime(2019, 10, 1);
var monthEnd = new DateTime(2019, 10, 31);
var items = dbContext.Items
.OrderByDescending(a => a.EffectiveDate)
.where(m => m.EffectiveDate <= monthEnd && m.EffectiveDate > monthStart)
这得到了所有正确的项目,除了一个。它需要获取所有有效日期在期间和开始日期之前的最后一个项目。 现在它获取所有有效日期在该期间内的项目。
有没有办法在单个查询中执行此操作?
例如 我们有具有这些生效日期的项目 (DD/MM/YYYY):
- 2000 年 5 月 5 日
- 2005 年 7 月 1 日
- 2019 年 7 月 8 日
- 12/07/2019
- 15/07/2019
- 15/08/2019
我想要在 01/07/2019 和 31/07/2019 之间有效的项目,结果将是:
- 2005 年 7 月 1 日
- 2019 年 7 月 8 日
- 12/07/2019
- 15/07/2019
您可以像这样将您的列表与另一个子查询连接起来:
var monthStart = new DateTime(2019, 10, 1);
var monthEnd = new DateTime(2019, 10, 31);
var items = dbContext.Items
.OrderByDescending(a => a.EffectiveDate)
.Where(m => m.EffectiveDate <= monthEnd && m.EffectiveDate > monthStart)
.Concat(dbContext.Items.Where(d => d.EffectiveDate < monthStart).TakeLast(1))