如何Linq中添加一天的日期SQL(How to add day to date in Linq t

2019-06-27 20:30发布

我写这个代码。 这里DT是输入的功能,以及someint。 列exp为一个T-SQL日期列上,它通过一个的LINQ日期时间。

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,将其转换我的天数,以毫秒为单位,并增加了这些。 这使得它可以把所有的精密双给C#。

这里是擦。 当此获取到SQL,我得到的错误:

日期部分毫秒不被用于数据类型日期时间函数DATEADD支持

基本上你不能添加毫秒的日期。 好了不开玩笑。 但我怎么得到的东西,在这里翻译? 我想INT天添加日期。 是唯一的希望这样做对他们的负面添加到其他人,我比较反对? 如果我想比较的列,同时增加了一个?

更新1

基思写道,这样的命令DATEPART(毫秒,10000,指明MyDate)已经在T-SQL,因为至少SQL Server 2000的这个错误提示,无论数据库使用的是不支持毫秒日期部分,这似乎很奇怪,我一直支持。

请注意,我使用SQL Server 2008中它不支持DATE数据类型。 它支持日期时间。

Answer 1:

如果您使用的是实体框架,使用System.Data.Objects.EntityFunctions如下:

c.CMT_TS > System.Data.Objects.EntityFunctions.AddDays(e.Call.CALL_TS, 1)


Answer 2:

我只是改变了列回日期时间。



Answer 3:

您可以将呼叫AddDays从SQL部分到.NET部分:

a.Exp.Value >= new DateTimeOffset(dt).AddDays(-Convert.ToDouble(Someint))


Answer 4:

这似乎是这种情况大多固定在.NET 4.5。

但是,如果你写的:

var activeProducts = from p in db.Products where DateTime.Now() <= p.EndDate.Date.AddDays(7) select p;

如OP描述你会得到同样的错误消息。

但是,如果你写:

var activeProducts = from p in db.Products where DateTime.Now() <= p.EndDate.AddDays(7) select p;

然后你就可以进入流奶与蜜之地。 请注意,我没有叫.Date对数据库的日期时间表示。 这似乎是在4.5的LINQ 2 SQL框架是一个边缘的情况下丢失的测试覆盖率



Answer 5:

创建一个新DateTime对象,并使用AddDays之后方法:

new DateTime(t.Key.Year,t.Key.Month,T.Key.Day).AddDays(xx)


Answer 6:

您还可以使用SqlMethods.DateDiffDay方法,如果你想比较两个日期



Answer 7:

你可以使用: System.Data.Entity.DbFunctions.AddDays(YourDateTime, NumberOfDays)这个函数将被转换为有效的SQL查询。 类System.Data.Entity.Core.Objects.EntityFunctions其中还包含AddDays功能已经过时了。



Answer 8:

你有没有考虑写自己的用户定义的函数,基本上发生在一个int(天数)和日期,返回DATEADD的结果()? 然后拉那到项目中的LINQ类。 然后,而不是调用.AddDate(),打电话给你的UDF - 这将让你在你的LINQ查询的一切,而不必手动拼凑一个SqlCommand。



Answer 9:

我解决我的问题与查询。

return (from a in dataContext.TableOfA
       where a.name == "Test" &&
       DbFunctions.AddHours(DbFunctions.CreateDateTime(
 a.Exp.Value.Year,a.Exp.Value.Month,a.Exp.Value.Day,a.Exp.Value.Hour,a.Exp.Value.Minute,
a.Exp.Value.Millisecond),Someint) >=     
DbFunctions.CreateDateTimeOffset(dt.Year,dt.Month,dt.Day,dt.Hour,dt.Minute,dt.Millisecond,0)
       select a).First();


Answer 10:

可能是好主意,如果你首先改变你的SQL查询来LINQ和过程的LINQ查询来代替。

只需添加ToList()或限制纪录

return (from a in dataContext.TableOfA.ToList()
   where a.name == "Test" &&
   a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
   select a).First();

所以,一旦你有Linq中你所有的东西,那么你可以更用途不同,我认为处理。

干杯



文章来源: How to add day to date in Linq to SQL