如果我有Linq
这样的SQL
表达方式:
from subscription in dbContext.Subscriptions where subscription.Expires > DateTime.Now select subscription
我希望这使用SQL Server GETDATE()
函数而不是运行C#
程序的机器的时间.
接下来的问题是如何翻译这个:
DateTime.Now.AddDays(2)
对此:
DATEADD(dd, 2, GETDATE())
liggett78.. 43
试试这个:
[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.至于日期差异,请查看System.Data.Linq.SqlClient命名空间,尤其是SqlMethods类的DayDiffXXX函数.
试试这个:
[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.至于日期差异,请查看System.Data.Linq.SqlClient命名空间,尤其是SqlMethods类的DayDiffXXX函数.
如果你不介意在每次使用之前查询数据库,我建议采用以下解决方法:在一个地方使用ExecuteQuery来获取数据上下文中的日期,如下所示:
public partial class YourDataContext { public DateTime GetDate() { return ExecuteQuery("SELECT GETDATE()").First(); } }
然后你就可以写了
from subscription in dbContext.Subscriptions where subscription > dbContext.GetDate().AddDays(2) select subscription