我想弄清楚如何在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