J'ai cette méthode QueryOver:NHibernate Query/QueryOver avec DateTime Comparaison
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));
}
Actuellement, je filtrent ma collection en dehors de SQL. Pas si bon pour la performance.
Ma méthode IsRecentlyAccessed
ressemble:
/// <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 ne supporte pas DateTime.Subtract
ni poignée DateTime1 - DateTime2
très facilement.
J'ai regardé à travers les ressources en ligne et tout le monde semble suggérer trop complexe function expressions ou extension methods. Ces solutions semblent excessives quand tout ce qui m'intéresse est de soustraire une valeur.
N'y a-t-il pas des solutions simples? Une approche manuelle pour l'élaboration de la requête SQL semble être la meilleure solution, mais il est dommage que NHibernate soit stoppé dans ses pistes par quelque chose qui semble être trivial.
Avez-vous essayé d'ajouter -1? – jdweng