QueryOver我有這個QueryOver方法:NHibernate的查詢/與日期時間比較
public IEnumerable<TrackedReportData> GetUnused(TimeSpan cacheExpiration)
{
return Session
.QueryOver<TrackedReportData>()
.Where(t => t.CacheSize > 0)
// TODO: NHibernate doesn't support DateTime comparison out-of-box.
//.Where(t => t.CacheSize > 0 && !t.IsRecentlyAccessed(cacheExpiration))
.List()
.Where(t => !t.IsRecentlyAccessed(cacheExpiration));
}
目前,我過濾SQL外部的我的收藏。表現不佳。
我IsRecentlyAccessed
方法是這樣的:
/// <summary>
/// Returns true if the cacheMeta has been accessed within the last `cacheExpiration`
/// number of milliseconds.
/// </summary>
public bool IsRecentlyAccessed(TimeSpan cacheExpiration)
{
if (!LastAccessDate.HasValue)
return false;
return DateTime.Now.Subtract(LastAccessDate.Value) <= cacheExpiration;
}
NHibernate的不支持DateTime.Subtract
也不處理DateTime1 - DateTime2
很容易。
我已經瀏覽了網上的資源,似乎每個人都建議過於複雜的function expressions或extension methods。當我有興趣做的是減去一個值時,這些解決方案看起來有點過分。
有沒有簡單的解決方案?製作SQL查詢的手動方法似乎是最好的選擇,但這是一種恥辱,NHibernate在其軌跡上被阻止了 ,這似乎是微不足道的。
你試過加-1嗎? – jdweng