【发布时间】:2021-10-14 02:49:08
【问题描述】:
使用 EF Core 5 和 SQL Server,我试图弄清楚如何在 LINQ 查询中转换存储为字符串的日期(在 SQL Server 端)。
我在EF.Functions 中进行了搜索,但我找不到此类日期解析的正确方法。
我也尝试过Convert.ToDateTime 和DateTime.Parse,但它们似乎都没有 LINQ 翻译。
直接 SQL 等效项是 Convert(datetime, mycolumn, 102)。
如果微软没有做任何事情来支持原生 SQL 中简单易用的东西,我会感到非常惊讶,所以如果我错过了一些明显的东西,我很抱歉,但我已经在网上搜索并做了一些尝试,然后才投降。
PS:请注意,我知道在应用 Where() 之前调用 ToList() 或修改数据库(或创建视图)以更改列类型等变通方法。
我的问题主要是:如何用EF调用Convert(datetime, mycolumn, 102)
【问题讨论】:
-
为什么需要in sql进行转换?你的db中的列是什么数据类型,c#中你想要的数据类型是什么?
-
"或修改数据库(或创建视图)以解决问题。"我的意思是,如果你的头撞到墙上很痛,不要放枕头。 Here 是 EF 可以转换为 MS Sql Server 的列表。
-
为什么日期不首先存储在
date或datetime列中? -
使用正确的数据类型在数据库中存储日期不是“解决方法”,而是正确的解决方案。您正在尝试做的是解决方法。如果您正确存储日期(或者甚至添加一个计算列以强制完整性并为您提供一个与正确类型一起使用的列,例如db<>fiddle),那么您的问题就会消失,您无需担心这里的解决方法, 或任何其他您需要将日期视为实际日期而不是字符串的时间
-
答案是“你不能,因为微软不支持你错误地使用 DBMS 的奇怪场景”。
标签: c# sql-server linq date entity-framework-core