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»)
Мобильная версия