如何在Linq to SQLexpression式中使用SQL的GETDATE()和DATEADD()?

如果我有一个像这样的Linq to SQLexpression式:

  from subscription in dbContext.Subscriptions where subscription.Expires > DateTime.Now select subscription 

我希望这个使用SQL Server的GETDATE()函数,而不是运行C#程序的机器的时间。

接下来的问题将是如何翻译这个:

 DateTime.Now.AddDays(2) 

对此:

 DATEADD(dd, 2, GETDATE()) 

试试这个 :

 [Function(Name="GetDate", IsComposable=true)] public DateTime GetSystemDate() { MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo; return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue; } 

编辑 :这需要是您的DataContext类的一部分。

现在,您可以在查询中使用GetSystemDate()而不是DateTime.Now。 至于date差异,请参阅System.Data.Linq.SqlClient命名空间,特别是SqlMethods类的DayDiffXXX函数。

如果你不介意在每次使用之前查询数据库,我会build议以下解决方法:在一个地方使用ExecuteQuery来获取数据上下文中的date,如下所示:

 public partial class YourDataContext { public DateTime GetDate() { return ExecuteQuery<DateTime>("SELECT GETDATE()").First(); } } 

然后你可以写

 from subscription in dbContext.Subscriptions where subscription > dbContext.GetDate().AddDays(2) select subscription 

你可以使用ExecuteQuery获得对sql的完全控制。 ASPX

不过,我知道ADO.NET似乎收益甚微(或者说可能还是相反的)。