Interrogazione con NHibernate, dove oggi la data è compresa tra publishDate e la data di scadenza
-
09-10-2019 - |
Domanda
Sto cercando di capire come meglio query in NHibernate in modo che i risultati restituiti sono tra le voci in cui oggi il tempo è> = PublishDateTime e <= ExpiryDateTime
La data di scadenza può essere nullo quindi ho bisogno per consentire questo. Ho trovato un paio di esempi qui e here ma sembrano funzionare in un modo diverso e accettano 2 valori e confronta con un campo di DB. Voglio l'altro sbagliato modo davvero.
Richiesta finora:
var query = _session.CreateCriteria<Message>()
.AddOrder(Order.Desc("PublishedDateTime"))
.List<Message>();
return query;
Qualche suggerimento sarebbe molto ricevuto!
Soluzione
più semplice query LINQ:
return _session.Query<Message>()
.Where(m => DateTime.Today >= m.PublishDateTime &&
(m.ExpiryDateTime == null ||
DateTime.Now <= m.ExpiryDateTime)
.OrderByDescending(m => m.PublishDateTime)
.ToList();
Criteri:
return _session.CreateCriteria<Message>()
.Add(Restrictions.Le("PublishedDateTime", DateTime.Today) &
(Restrictions.IsNull("ExpiryDateTime") |
Restrictions.Ge("ExpiryDateTime",
DateTime.Now)))
.AddOrder(Order.Desc("PublishedDateTime"))
.List<Message>();
Altri suggerimenti
in C #:
var formato = "dd/MM/yyyy h:mm:ss";
var sDesde = DateTime.Now.ToString("dd/MM/yyyy") + " 0:00:00";
var sHasta = DateTime.Now.ToString("dd/MM/yyyy h:mm:ss");
Viaje vDesde = new Viaje { Viajefecha = DateTime.ParseExact(sDesde, formato , null) };
Viaje vHasta = new Viaje { Viajefecha = DateTime.ParseExact(sHasta, formato, null) };
StringWriter strWriter = new StringWriter();
var resultado = cp.sesion.CreateCriteria<Viaje>().Add(Expression.Between("Viajefecha", vDesde.Viajefecha, vHasta.Viajefecha)).AddOrder(Order.Asc("Viajefecha")).List<Viaje>();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow