【发布时间】:2020-02-07 10:46:06
【问题描述】:
我有一个实体项目表,我需要查询。
每个项目都有两个属性: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)的项目:
- 05/05/2000
- 07/01/2005
- 08/07/2019
- 12/07/2019
- 15/07/2019
- 15/08/2019
我想要在 01/07/2019 和 31/07/2019 之间有效的项目,结果将是:
- 07/01/2005
- 08/07/2019
- 12/07/2019
- 15/07/2019
【问题讨论】:
-
你能提供一个示例输入列表和想要的结果吗?
-
我现在添加了一个示例输入和输出
-
monthStartnewed 的时间为“00:00:00”,但是如果您的比较日期(例如 e.EffectiveDate)有一些不同的时间怎么办? where 表达式不会给出想要的结果... -
我想不出用一个表达式来处理这个问题的方法。我会保留您当前的表达式,然后使用输入列表的排序版本来获取与
your first result -1对应的索引。不过,您很可能需要在此处进行一些检查,以确保您在范围内。 -
如果您能定义
plus one more的含义,将会有所帮助。是任何一个吗?还是开始日期前的最后一个?还是开始日期之后的第一个?还是随便一个?
标签: c# entity-framework linq linq-to-entities