【问题标题】:EF Core sum date with timespan inside where statementEF Core求和日期与where语句中的时间跨度
【发布时间】:2020-11-23 08:01:41
【问题描述】:

在 EF Core 3.1 中,我有以下模型

 public class Advertisement
{
    public int Id { get; set; }
    public string Title { get; set; }
    public DateTimeOffset? EndPeriod { get; set; }
    public TimeSpan Duration { get; set; } 
}

我有一个简单的要求,即使用 LINQ 检查广告结束时间是否小于当前日期加上持续时间。

我试过了

ads.Where(a => EF.Functions
               .DateDiffMinute(a.EndPeriod, DateTimeOffset.Now.Add(a.Duration)) <= 0)

但抛出一个错误说:

InvalidOperationException:无法翻译 LINQ 表达式。要么以可翻译的形式重写查询,要么切换到客户评估。

有没有办法在没有客户端评估的情况下解决这个问题?

【问题讨论】:

  • 这不是 EF Core 5.0 的特性吗?
  • 对不起,我错过了。

标签: c# ef-core-3.1


【解决方案1】:

这个表达式DateTimeOffset.Now.Add(a.Duration)好像不能翻译。

尝试使用类似的东西:

ads
  .Select(a => new
  {
     ...
     a.EndPeriod,
     Period = DateTimeOffset.Now.Add(a.Duration)
  })
  .Where(a => EF.Functions.DateDiffMinute(a.EndPeriod, a.Period) <= 0)

【讨论】:

  • 我写的是同样的方法。删除我的答案,因为我们都以相同的方式回答。
  • 如果DateTimeOffset.Now.Add(a.Duration) 无法翻译,将其放入中间投影有何帮助?还是不能翻译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2010-12-29
  • 2017-04-13
  • 1970-01-01
相关资源
最近更新 更多