如何在Linq to SQL中添加日期

Ant*_*y D 16 c# datetime linq-to-sql

我正在写这段代码.这里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();
Run Code Online (Sandbox Code Playgroud)

在C#中,您可以在日期时间中添加一天.意思是你可以添加1.5天.在T-SQL中,您只能添加1天,然后增加12小时.您必须为每个部件添加一个int.因此,当Linq将AddDays转换为T-SQL时,它会将我的天数转换为毫秒,并添加这些天数.这允许它给出double赋予C#的所有精度.

这就是问题.当这到达SQL时,我收到错误:

数据类型日期的日期函数dateadd不支持datepart毫秒

基本上你不能在一个日期添加毫秒.好吧不开玩笑.但是我如何获得翻译的内容呢?我想将int天添加到日期.唯一想要这样做的是将它们的负面效果添加到我正在比较的另一个人身上吗?如果我想在添加到列时与列进行比较,该怎么办?

更新1

Keith写道,至少从SQL Server 2000开始,T-SQL支持像datepart(毫秒,10000,myDate)这样的命令.这个错误表明你使用的数据库不支持毫秒日期部分,这对我来说似乎很奇怪.

请注意我使用的是SQL Server 2008.DATE数据类型不支持它.它在datetime上受支持.

Dav*_*ave 8

如果您使用的是Entity Framework,请使用System.Data.Objects.EntityFunctions,如下所示:

c.CMT_TS > System.Data.Objects.EntityFunctions.AddDays(e.Call.CALL_TS, 1)
Run Code Online (Sandbox Code Playgroud)

  • 2019 年,“EntityFunctions”已弃用。请改用“System.Data.Entity.DbFunctions”。 (4认同)

Ant*_*y D 5

我只是将列改回 DateTime。