查询nHibernate,其中今天的日期介于publishDate和Expiry日期之间

时间:2010-12-06 16:29:32

标签: nhibernate date date-range nhibernate-criteria

我试图弄清楚如何在NHibernate中进行最佳查询,以便返回的结果介于今天时间为> = PublishDateTime和< = ExpiryDateTime

的条目之间

到期日可以为空,所以我需要允许。我找到了几个例子herehere,但它们似乎以不同的方式工作并接受2个值并与一个DB字段进行比较。我真的想要另一种方法。

到目前为止的查询:

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

任何建议都会受到极大的欢迎!

2 个答案:

答案 0 :(得分:16)

最简单的Linq查询:

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

标准:

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

答案 1 :(得分:0)

在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>();