我有一个日期以不太好的格式 (dd-MM-yyyy) 存储为字符串。 SQL 服务器无法自动将其转换为日期,至少不能使用其上的设置,但在一些帮助下它修复了它。以下 SQL 语句可以完美运行:
select * from table
where convert(date,myValue,105) < GETDATE()
我遇到的问题是,如何在 LINQ 中执行此操作?我手动尝试了不同的方法,并测试了 Linqer 从我的 SQL 生成 LINQ。这是 Linqer 给我的:
from table in db.table
where
Convert.ToDateTime(myValue) < DateTime.Now
select new {
...
}
问题是,当我运行上面的语句时,我得到:
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。
可能是因为它将 105 参数丢给了转换方法。我尝试了不同的解析方法(Parse、ParseExact 和 Convert.ToDateTime 以及 IFormatProvider),但所有这些都会给我或多或少类似的错误:
方法“System.DateTime ParseExact(System.String, System.String, System.IFormatProvider)”没有支持的 SQL 转换。
所以我的问题是,是否有一种好方法可以在 Linq 中转换具有“奇数”日期格式的日期,以便我可以使用 T-SQL?我已经有了一个“有效”的解决方案,但我想知道是否有任何方法可以让 Linq 以一种很好的方式解释它?
虽然这不是最佳实践,但如果可行,那就接受吧,我建议您在表中创建一个 View
CREATE VIEW view_table
AS
select tbl_id,
convert(date,myValue,105) as myDate
from table
那么从你的 linq
from table in db.view_table
where
Convert.ToDateTime(myDate) < DateTime.Now
select new {
...
}
因为列 myValue 已经转换为 105 格式。
我是一名优秀的程序员,十分优秀!