当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在LinqtoSQL表达式中使用SQL的GETDATE()和DATEADD()?》经验,为你挑选了2个好方法。

如果我有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函数.



1> liggett78..:

试试这个:

[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函数.



2> Panos..:

如果你不介意在每次使用之前查询数据库,我建议采用以下解决方法:在一个地方使用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

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有