EF Core 7 Преобразование таблицы UTC в местный часовой пояс ⇐ C#
-
Anonymous
EF Core 7 Преобразование таблицы UTC в местный часовой пояс
С помощью SQL я могу сделать что-то подобное
ВЫБРАТЬ * ОТ [T1].[dbo].[Заказы] ГДЕ CONVERT (ДАТА, OrderDate В ЧАСОВОМ ПОЯСЕ «UTC» В ЧАСОВОМ ПОЯСЕ «Австралийское восточное время») МЕЖДУ «06.12.2023» И «07.12.2023» ПОРЯДОК ПО OrderId DESC; Записи отображаются так, как и ожидалось,
однако я хочу добиться того же с помощью EF Core без необходимости использовать Enumerable или ToList.
query = query.Where(order => EF.Functions.DateDiffDay( TimeZoneInfo.ConvertTimeFromUtc(order.OrderDate, TimeZoneInfo.Utc), TimeZoneInfo.ConvertTimeFromUtc(startDateTime, TimeZoneInfo.Local) ) >= 0 && EF.Functions.DateDiffDay( TimeZoneInfo.ConvertTimeFromUtc(endDateTime, TimeZoneInfo.Local), TimeZoneInfo.ConvertTimeFromUtc(order.OrderDate, TimeZoneInfo.Utc) ) >= 0); Похоже, я неправильно понял, как правильно преобразовать часовой пояс, судя по следующей ошибке
System.InvalidOperationException: возникло исключение при попытке оценить выражение параметра запроса LINQ. Дополнительную информацию см. во внутреннем исключении. Чтобы отобразить дополнительную информацию, вызовите DbContextOptionsBuilder.EnableSensitiveDataLogging. ---> System.ArgumentException: преобразование не удалось завершить, поскольку для предоставленного DateTime не было правильно установлено свойство Kind. Например, если свойство Kind имеет значение DateTimeKind.Local, исходный часовой пояс должен быть TimeZoneInfo.Local. (Параметр «sourceTimeZone»)
С помощью SQL я могу сделать что-то подобное
ВЫБРАТЬ * ОТ [T1].[dbo].[Заказы] ГДЕ CONVERT (ДАТА, OrderDate В ЧАСОВОМ ПОЯСЕ «UTC» В ЧАСОВОМ ПОЯСЕ «Австралийское восточное время») МЕЖДУ «06.12.2023» И «07.12.2023» ПОРЯДОК ПО OrderId DESC; Записи отображаются так, как и ожидалось,
однако я хочу добиться того же с помощью EF Core без необходимости использовать Enumerable или ToList.
query = query.Where(order => EF.Functions.DateDiffDay( TimeZoneInfo.ConvertTimeFromUtc(order.OrderDate, TimeZoneInfo.Utc), TimeZoneInfo.ConvertTimeFromUtc(startDateTime, TimeZoneInfo.Local) ) >= 0 && EF.Functions.DateDiffDay( TimeZoneInfo.ConvertTimeFromUtc(endDateTime, TimeZoneInfo.Local), TimeZoneInfo.ConvertTimeFromUtc(order.OrderDate, TimeZoneInfo.Utc) ) >= 0); Похоже, я неправильно понял, как правильно преобразовать часовой пояс, судя по следующей ошибке
System.InvalidOperationException: возникло исключение при попытке оценить выражение параметра запроса LINQ. Дополнительную информацию см. во внутреннем исключении. Чтобы отобразить дополнительную информацию, вызовите DbContextOptionsBuilder.EnableSensitiveDataLogging. ---> System.ArgumentException: преобразование не удалось завершить, поскольку для предоставленного DateTime не было правильно установлено свойство Kind. Например, если свойство Kind имеет значение DateTimeKind.Local, исходный часовой пояс должен быть TimeZoneInfo.Local. (Параметр «sourceTimeZone»)