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!

È stato utile?

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
scroll top