c# - 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 - 使用 c11 标准和 clang 来使用 strcpy_s
- python - 将带有 matplotlib 的 networkx 图保存为 .jpg 文件
- php - 尝试从命名空间加载接口“NotExistingInterface”
- r - 将时间输入打印为 r 中的单词
- c++ - 我正在尝试创建一个布尔函数来评估一个 char 并返回 true 如果 char 是 '(' ')' '*' '-' '+'
- c# - 如何按降序对文本文件中的不同类型数字排序到文本框?
- c# - 如何使用 Azure 的 Text-To-Speech 创建音频文件而不是实时文本到语音?(C# Unity SDK)
- r - 为什么字符列的类型是列表?
- c# - 阅读很多帖子,但无法让 Excel 在 C# 中关闭
- java - 即使 s2=s1,为什么在第二行代码中打印“xy”?