Как я могу выразить методы GetDate () и DateAdd () в EF Core и LINQ? - PullRequest
0 голосов
/ 04 апреля 2019

Я использую SQL Server и Entity Framework Core 2. У меня есть следующий запрос SQL, который (в SQL Server Management Studio) правильно отображает измерения, которые были добавлены в предыдущий час (в таблицу измерений):

SELECT id, [timestamp] 
FROM measurement 
WHERE
  dateADD(MINUTE, 60, [timestamp]) > getdate()

Это хорошо работает.Но теперь я хотел бы написать этот запрос в LINQ, используя EF Core 2. Конечно, я мог бы написать следующий код:

dbContext
   .Measurement
   .Include(m => m.Section)
   .GroupBy(m => m.Section, (section, m) => new Section
    {
       Name = section.Name,
       CustomerId = section.CustomerId,
       MostRecentMeasurement = m.Max(z => z.Timestamp)
    })
   .Where(x => x.MostRecentMeasurement > DateTime.Now.AddHours(-1))
   .ToList();

, но это имеет следующие недостатки:

  • DateTime.Now не может быть переведен в SQL, поэтому это будет оцениваться на клиенте, который не очень хорошо работает,
  • Часовой пояс на клиенте отличается от часового пояса сервера базы данных, что требует дополнительной сложности и вычислений.

Как я могу выразить запрос в EF Core таким образом, чтобы он был полностью переведен в SQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...