比较 EF Core Linq 查询中的 DateTime

Posted

技术标签:

【中文标题】比较 EF Core Linq 查询中的 DateTime【英文标题】:Compare DateTime in EF Core Linq Query 【发布时间】:2017-06-27 22:20:26 【问题描述】:

我在我的项目中使用 .NETCore 和 EF Core。我无法使用 DateTimes 查询带有表达式的项目。

return _context.table
       .Where( x=> x.CPULoad > 90 && X.Date >= DateTime.Now.AddMinutes(-5));

CPULoad 运行良好,但日期时间比较输出如下。

The LINQ expression '(([x].Date >= DateTime.Now.AddMinutes(-5))' could not be translated and will be evaluated locally.

有人可以解释我做错了什么吗?提前致谢!

【问题讨论】:

【参考方案1】:

试试这个...

var compareDate = DateTime.Now.AddMinutes(-5);
return _context.table
    .Where( x=> x.CPULoad > 90 && X.Date >= compareDate);

这里的问题本质上是实体框架不知道如何将DateTime.Now.AddMinutes(-5) 转换为SQL,因此您需要获取值然后将其传递给实体框架。

【讨论】:

谢谢!我想我越来越近了......我现在在我的输出中看到了查询,但我的结果仍然是“一切”。在我的输出中,我看到了这个 ``` Executed DbCommand [Parameters=[@__date_0='?']....] .. FROM ... 其中 [x].Date >= @__date_0 AND ... ``` 如果没有更多上下文,很难说现在发生了什么...table 的模型是什么样的?您也可以尝试直接在 SSMS 中运行生成的 EF 查询并尝试从那里进行调试。 该模型具有“日期”属性,它是“日期时间”类型。我试图确保那些匹配。

以上是关于比较 EF Core Linq 查询中的 DateTime的主要内容,如果未能解决你的问题,请参考以下文章

插值字符串上的 Ef Core vs Linq

使用 linq 计算 EF Core 中的平均评分

如何在 EF 查询中执行日期比较?

Entityframework Core 3 linq表达式无法翻译

EF Core 多对多关系上的 LINQ 查询

LINQ / EF Core 不能在查询中使用 string.Contains