【问题标题】:C# Linq query.Date Between Dates don't workC# Linq 查询。日期之间的日期不起作用
【发布时间】: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 &gt;= 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 =&gt; b.MeasuredValues.Any(d =&gt; d.Time &gt;= command.FromDate &amp;&amp; d.Time &lt;= command.ToDate)).Select(b =&gt; 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结束后开始。

标签: c# linq date filter


【解决方案1】:

解决方法见下图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多