我想弄清楚如何在NHibernate中编写查询,以便返回的结果是用户特定时区的特定日期。目前系统中的所有日期都以UTC格式存储,我将时区标识与当前登录的用户一起存储。通过使用sql查询将UTC日期转换为用户时区的日期,我们能够在sql中进行查询。现在我们转换到使用NHibernate。下面的代码是我试图完成,但NHibernate抛出“System.DateTime添加(System.TimeSpan)”NotSupportedException,也不知道这是否重要,但我要追溯到MySQL数据库服务器。NHibernate按UTC日期字段查询
var readings =
session.Query<EnergyReading>()
.Where(x => x.TimeStamp.Add(usersTimeZone.BaseUtcOffset).Date == usersTime.Date && x.DeviceId == deviceId);
SOLUTION
基于我想出了这在我的工作情况如下degorolls建议。
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);
什么是此代码生成查询。另外,你的'mysql'表是什么样的? – shanabus 2012-02-28 04:09:23
为什么不在查询之外进行时区调整?无论如何,这似乎最好避免在数据库上工作。 shanabus - – 2012-02-28 04:09:58
- 表格结构非常简单。包含三列:(Id - VARCHAR(40))(Energy - FLOAT)(TimeStamp - DATETIME) – PCG 2012-02-28 13:12:45