如果我有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())
答案 0 :(得分:43)
尝试this:
[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 :(得分:6)
如果你不介意在每次使用之前查询数据库,我建议采用以下解决方法:在一个地方使用ExecuteQuery来获取数据上下文中的日期:
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
答案 2 :(得分:0)
您可以使用ExecuteQuery来完全控制sql http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
我知道这似乎与ADO.NET相比没什么好处(或者可能是对比)。