首页 > 解决方案 > EntityFramework Core 2.1 linq 查询在 where 子句中使用 DateTime.Add() 未翻译成 SQL

问题描述

我需要将两列中的两个 DateTime 值组合成一个 datetime 值。第一个保存日期部分,秒保存时间部分。现在我想获取日期并将时间添加到它,以便我可以使用它来根据参数正确过滤它。

我的问题是,我无法将组合转换为 SQL,因此无法在 SQL-Server 而不是客户端上执行。

到目前为止我已经尝试过:
在下面的“ColumnA”是具有日期部分值的第一列,“ColumnB”是其中包含时间部分的第二列。“DateParameter”是要检查的注入参数。

1) .Where(a => (a.ColumnA.Date + a.ColumnB.TimeOfDay) <= DateParameter);
2) .Where(a => (a.ColumnA.Date.Add(a.ColumnB.TimeOfDay)) <= DateParameter);
3) .Where(a => (a.ColumnA.Date.AddHours(a.ColumnB.Hour).AddMinutes(a.ColumnB.Minute).AddSeconds(a.ColumnB.Second)) <= DateParameter);
4) .Where(a => (new DateTime(a.ColumnA.Year, a.ColumnA.Month, a.ColumnA.Day, a.ColumnB.Hour, a.ColumnB.Minute, a.ColumnB.Second)) <= DateParameter);

我在 .NetFramework4.7.2 上的 EntityFramework Core 2.1 上运行。以上所有内容都实际执行(无法翻译异常来自版本 3.0 或 3.1),但在 RAM 中而不是在 SQL-Server 上进行所有过滤。

函数“.AddDays()”被正确翻译,“.AddHours()”没有,这是为什么呢?两者都可以转换为 DATEADD()-Function,只是使用“datepart”的不同参数。

标签: c#sqllinq-to-sqlentity-framework-core

解决方案


推荐阅读