c# - 动态 Linq 将不正确的 DateTime 格式传递给 DB
问题描述
我正在使用带有动态 Linq 库的实体框架。有这样的代码
var myDate = new DateTime(2021, 01, 01);
var res = dbContext.MyEntities.Where("CreateDate < @0", myDate);
如果我在本地集合上运行相同的查询,它工作得很好,但在数据库上它返回错误:“从字符串转换日期和/或时间时转换失败。”
我检查了 DB Profiler,原因是传递给数据库的格式。它将日期转换为“2021-01-01T00:00:00.0000000”而不是预期的“2021-01-01 00:00:00.000”,结果有类似的查询
SELECT * FROM [MyEntity] AS [a]
WHERE [a].[CreateDate] < '2021-01-01T00:00:00.0000000'
这会产生错误,因为 SQL 无法解析此字符串。尝试将参数指定为字符串,但 Dynamic Linq 仍将其转换为此格式并在结果中给出相同的错误。有没有办法解决这种行为?
解决方案
感谢 DM 的想法。经过一番调查,我意识到当使用 Dynamic Linq 进行调用时,出于某种原因使用datetime2而不是datetime的 EF 确实引起了问题。作为解决方案,我在 Entity 类中为我的字段指定了列类型
[Column(TypeName = "datetime")]
public DateTime CreateDate { get; set; }
现在可以了。
推荐阅读
- matlab - 如何在 MATLAB 中将值转换为 N 位分辨率?
- python - tmux - 如何在窗格中显示图像?
- c# - 使用反射和 new() 启动新的通用类对象
- selenium - MSEdge 驱动程序未使用 selenium 启动 Brwoser
- python - 如何在 Kivy 的 desktopApp 上制作透明屏幕?
- sql-server - TSQL:表类型未作为临时表处理?
- c - 交换字符串并检查C中的不相等条件?
- ruby-on-rails - 获取所有供应商的列表?
- python - BeautifulSoup 不能在 Python 的多线程程序中工作
- python - 获取两个日期之间的[年月日]差异