Подтвердить что ты не робот

Как использовать SQL GETDATE() и DATEADD() в выражении Linq to SQL?

Если у меня есть выражение Linq to SQL, как это:

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

Я хочу, чтобы это использовало функцию SQL Servers GETDATE() вместо времени, когда машина работала с программой C#.

Следующий вопрос заключается в следующем:

DateTime.Now.AddDays(2)

:

DATEADD(dd, 2, GETDATE())
4b9b3361

Ответ 1

Попробуйте this:

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

EDIT: это должно быть частью вашего класса DataContext.

Теперь вы можете использовать GetSystemDate() вместо DateTime.Now в ваших запросах. Что касается различий даты, посмотрите пространство имен System.Data.Linq.SqlClient, особенно функции DayDiffXXX класса SqlMethods.

Ответ 2

Если вы не возражаете запросить базу данных перед каждым использованием, я бы предложил следующее обходное решение: используйте 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