使用nHibernate查询今天日期在发布日期和过期日期之间的内容

9
我正在尝试找出在NHibernate中最佳查询方式,以便返回今天时间大于等于PublishDateTime且小于等于ExpiryDateTime的条目。到期日期可能为空,因此我需要允许这种情况。我发现了一些例子herehere,但它们似乎以不同的方式工作,并接受两个值并将其与一个DB字段进行比较。我真正想要的是另一种方式。目前的查询如下:
var query = _session.CreateCriteria<Message>()
                .AddOrder(Order.Desc("PublishedDateTime"))
                .List<Message>();
                return query;

任何建议都将受到极大的欢迎!
2个回答

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 感谢您提供两个示例。我对 Linq 是新的,但对 Criteria 方法很感兴趣,所以谢谢您。 - Andrew
帮我一个忙,只需将“.Today”更改为“.Now”,我会将您标记为答案。再次感谢您的输入 :) - Andrew
我以为你想要“今天的日期”,而不是“当前时间”(这就是问题所说的)。 - Diego Mijelshon
抱歉,我的意思是日期时间 - 我用词不当,但字段上的用词是正确的 - 我现在会更新 - 再次感谢您的帮助。 - Andrew

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接