2010-12-06 11 views
8

Estoy tratando de encontrar la manera de mejor consulta en NHibernate para que los resultados devueltos son entre las entradas, donde hoy el tiempo es> = PublishDateTime y < = ExpiryDateTimela consulta con NHibernate en la fecha de hoy es entre publishDate y la fecha de caducidad

La fecha de caducidad puede ser nula, así que debo tenerlo en cuenta. Encontré un par de ejemplos here y here pero parecen funcionar de una manera diferente y aceptan 2 valores y se comparan con un campo DB. Quiero el otro camino en realidad.

de consultas hasta el momento:

var query = _session.CreateCriteria<Message>() 
       .AddOrder(Order.Desc("PublishedDateTime")) 
       .List<Message>(); 
       return query; 

Cualquier sugerencia serían recibidos en gran medida!

Respuesta

16

más fácil consulta LINQ:

return _session.Query<Message>() 
       .Where(m => DateTime.Today >= m.PublishDateTime && 
          (m.ExpiryDateTime == null || 
          DateTime.Now <= m.ExpiryDateTime) 
       .OrderByDescending(m => m.PublishDateTime) 
       .ToList(); 

Criterios:

return _session.CreateCriteria<Message>() 
       .Add(Restrictions.Le("PublishedDateTime", DateTime.Today) & 
            (Restrictions.IsNull("ExpiryDateTime") | 
            Restrictions.Ge("ExpiryDateTime", 
                DateTime.Now))) 
       .AddOrder(Order.Desc("PublishedDateTime")) 
       .List<Message>(); 
+0

1 gracias por dar dos ejemplos. Linq I nuevo, pero estaba interesado en el método de Criteria, así que gracias – Andrew

+0

Hazme un favor simplemente cambie .Hoy en .Now y te marcaré como la respuesta. Gracias de nuevo por su entrada :) – Andrew

+0

Pensé que quería "la fecha de hoy", no "la hora actual" (eso es lo que dice la pregunta) –

0

en 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>(); 
+0

eles preferrem como gambiarras, vai por mim! –

Cuestiones relacionadas