微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态 Linq 将错误的 DateTime 格式传递给 DB

如何解决动态 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 仍将其转换为这种格式并在结果中给出相同的错误。有什么办法可以解决这个问题吗?

解决方法

感谢 D M 的想法。经过一番调查,我意识到问题确实是由使用动态 Linq 进行调用时出于某种原因使用 datetime2 而不是 datetime 的 EF 引起的。 作为解决方案,我在实体类中为我的字段指定了列类型

[Column(TypeName = "datetime")]
public DateTime CreateDate { get; set; }

现在可以使用了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。