Я использую 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?