如何获取在linq中的日期范围内有效的项目

How to get items that were effective within a date range in linq

我有 table 个实体制造的项目,我需要查询。

每个项目都有两个属性:IdEffectiveDate

我需要一个日期范围内所有有效项目的列表。

这是我目前拥有的:

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):

  1. 2000 年 5 月 5 日
  2. 2005 年 7 月 1 日
  3. 2019 年 7 月 8 日
  4. 12/07/2019
  5. 15/07/2019
  6. 15/08/2019

我想要在 01/07/201931/07/2019 之间有效的项目,结果将是:

  1. 2005 年 7 月 1 日
  2. 2019 年 7 月 8 日
  3. 12/07/2019
  4. 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))