Я пытаюсь выяснить, как написать запрос в NHibernate, чтобы возвращаемые результаты относились к определенной дате из определенного часового пояса пользователя.В настоящее время все даты в системе хранятся в формате UTC, и я сохраняю идентификатор часового пояса для текущего зарегистрированного пользователя.Мы смогли сделать запрос в sql, преобразовав дату UTC в дату часового пояса пользователей с помощью sql запросов.Теперь мы переходим к использованию NHibernate.Приведенный ниже код - это то, что я пытаюсь выполнить, но NHibernate создает исключение NotSupportedException для «System.DateTime Add (System.TimeSpan)», также не уверен, имеет ли это значение, но я собираюсь найти сервер базы данных MySQL.
var readings =
session.Query<EnergyReading>()
.Where(x => x.TimeStamp.Add(usersTimeZone.BaseUtcOffset).Date == usersTime.Date && x.DeviceId == deviceId);
РЕШЕНИЕ
Основываясь на предложении дегороллов, я пришел к следующему, которое сработало в моей ситуации.
var usersTime = Utility.GetCurrrentUsersDateTime();
var afterDate = TimeZoneInfo.ConvertTimeToUtc(usersTime.Date);
var beforeDate = TimeZoneInfo.ConvertTimeToUtc(usersTime.Date.AddDays(1));
var energyReadingsList = context.Session.Query<EnergyReading>()
.Where(x => x.TimeStamp > afterDate && x.TimeStamp < beforeDate)
.OrderByDescending(x => x.TimeStamp)
.ToList();
Utility.ConvertEnergyReadingDatesToUsersTimeZone(energyReadingsList);