asp.net core 2.1 ef core 2.1 сравнение даты не работает на сервере

Привет, я столкнулся с очень странной проблемой в asp.net core 2.1. У меня есть запрос, выбирающий некоторые данные для определенной даты, например

var balances = dbContext.Balances.Where(x => x.BalanceDate.Date == workDay.Date); 

Но запрос работает на локальном ENV и даже когда я подключаюсь к удаленному серверу SQL. но на стороне сервера он не возвращает никаких результатов.


person Mudasar Rauf    schedule 15.07.2018    source источник
comment
Ваш удаленный SQL-сервер настроен на работу в другое время, то есть время в формате UTC?   -  person Umang    schedule 16.07.2018
comment
Строка подключения такая же? Возможно, вы обращаетесь к другой базе данных, которая не содержит тех же данных.   -  person jdweng    schedule 16.07.2018
comment
@jdweng Есть только 1 база данных с данными :)   -  person Mudasar Rauf    schedule 16.07.2018
comment
Вы уверены, что у вас не больше mdf файла?   -  person jdweng    schedule 16.07.2018
comment
@jdweng Да, уверен на 100%.   -  person Mudasar Rauf    schedule 16.07.2018
comment
Привет @Umang, я думаю, что сравнение только части даты с '.Date' будет игнорировать часть времени? время в системе такое же, как и в моем местном env: utc + 00:00 Dublin, Edinburgh, London time. Sql-сервер сохраняет дату в формате времени 2018-07-16 16:04:38 + миллисекунды.   -  person Mudasar Rauf    schedule 16.07.2018
comment
Интересный. Где находится ваш сервер? Это случайно не лазурное веб-приложение?   -  person Umang    schedule 17.07.2018
comment
это кастомный vps с Windows server 2012 от 1 & 1.co.uk, не знаю, зачем он это делает.   -  person Mudasar Rauf    schedule 17.07.2018
comment
Можете ли вы подтвердить, что часовой пояс вашего сервера совпадает с вашим местным часовым поясом? Очень интересно, если локальный и удаленный серверы находятся в одном часовом поясе и дают разные результаты   -  person Umang    schedule 24.07.2018
comment
@Umang Да, они идентичны UTC 00 с сохранением дневного света   -  person Mudasar Rauf    schedule 30.07.2018


Ответы (1)


Это может иметь какое-то отношение к часовому поясу или миллисекундам, включенным в тип DateTime в SQL Server. Это может быть одна из причин, указанных выше. Вы можете это сделать (только == сравнение)

 var balances = dbContext.Balances.Where(x => 
     x.BalanceDate./*Date.*/Year == workDay/*.Date*/.Year &&
     x.BalanceDate./*Date.*/Month == workDay/*.Date*/.Month &&
     x.BalanceDate./*Date.*/Day == workDay/*.Date*/.Day); 

PS: Всегда рекомендуется управлять / унифицировать смещение часового пояса или использовать UTC при работе с типами даты.

person Bellash    schedule 14.06.2019
comment
Я попробую, но не знаю, почему это происходит - person Mudasar Rauf; 25.06.2019