【发布时间】:2009-08-04 13:49:12
【问题描述】:
我正在编写这段代码。这里 dt 和 someint 都被输入到函数中。 Exp 列是 T-SQL 日期列,通过 Linq 作为 DateTime。
return (from a in dataContext.TableOfA
where a.name == "Test" &&
a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
select a).First();
在 C# 中,您可以将双精度作为日期添加到日期时间。这意味着您可以增加 1.5 天。在 T-SQL 中,您只能添加 1 天,然后是 12 小时。您必须为每个部分添加一个 int。因此,当 Linq 将 AddDays 转换为 T-SQL 时,它会将我的天数转换为毫秒,然后将它们相加。这允许它提供 double 提供 C# 的所有精度。
这就是问题所在。当这到达 SQL 时,我收到错误:
datepart 毫秒不是 由日期函数 dateadd 支持 数据类型日期
基本上,您不能将毫秒添加到日期。好吧,不开玩笑。但是我怎样才能得到可以在这里翻译的东西呢?我想将 int 天数添加到日期中。唯一想这样做是为了将他们的负面因素添加到我正在比较的另一个人身上吗?如果我想在添加列的同时与列进行比较怎么办?
更新 1
Keith 写道,类似的命令 日期部分(毫秒,10000,我的日期) 自从在 T-SQL 中得到支持 至少 SQL Server 2000。这个错误 建议您使用任何数据库 正在使用不支持 毫秒日期部分,这似乎 对我来说很奇怪。
请注意,我使用的是 SQL Server 2008。DATE 数据类型不支持它。它在日期时间上受支持。
【问题讨论】:
-
至少从 SQL Server 2000 开始,T-SQL 就支持 datepart(millisecond, 10000, myDate) 之类的命令。此错误表明您使用的任何数据库都不支持毫秒日期部分,这对我来说似乎很奇怪。
-
DATE 数据类型不支持。它在日期时间上受支持。
-
这更有意义。好吧,如果您可以控制数据库设计,那么简单的解决方案就是将此列从 DATE 更改为 DATETIME。显然,如果您问这个问题,这不是您可以控制的吗?
标签: c# datetime linq-to-sql