【发布时间】:2020-07-06 05:35:59
【问题描述】:
我尝试了两种仅从日期框架中选择日期的方法,但仍然得到错误的结果。我看到另一个帖子,但响应对我不起作用。请帮帮我。
List<Measurement> measurementsForTemplate = await databaseCommandContext.CreateSet<Measurement>()
.Include(v => v.MeasuredValues)
.Where(x => x.MeasurementFormTemplateId == command.TemplateId )
.Where(v => v.MeasuredValues.Any(d => d.Time >= command.FromDate))
.Where(v => v.MeasuredValues.Any(d => d.Time <= command.ToDate)).ToListAsync(cancellationToken);
或者我在上面的查询中创建了一个没有过滤的对象然后
var measurementsForTemplateDateLimit = measurementsForTemplate.Where(b => b.MeasuredValues
.Any(d => d.Time >= command.FromDate && d.Time <= command.ToDate)).Select(b => b);
【问题讨论】:
-
请分享示例数据和预期结果。这个表达式
d.Time >= command.FromDate告诉你比较时间和日期(根据属性名称) -
这通常是因为类型不正确...例如数据库值可能存储为字符串...或者 POCO 属性是字符串等。
-
@PavelAnikhouski 所有值都具有 DatTime 类型。 d.Time= 20.02.2020 , d.Time= 24.02.2020, d.Time= 26.02.2020 FromDate=19.02.2020,ToDate=25.02.2020 结果 - On MeasuredValues 应该是日期为 20.02.2020 ,24.02 的唯一对象。 2020.
-
@rfmodulator 所有值都有 DaTime 类型。我也尝试过这种方式我也尝试过这种方式
var measurementsForTemplateDateLimit = measurementsForTemplate.Where(b => b.MeasuredValues.Any(d => d.Time >= command.FromDate && d.Time <= command.ToDate)).Select(b => b); -
比较两个日期范围时有 6 个范围 1) A 在 B 开始之前结束 2) A 在 B 之前开始,A 在 B 结束之前结束 3) A 在 B 开始之前开始,A 在 B 结束之后结束4)A在B开始后开始,A在B结束前结束 5)A在B开始后开始,A在B结束后结束 6)A在B结束后开始。