Запросы с nHibernate, где сегодняшняя дата находится между publishDate и датой истечения срока - PullRequest
8 голосов
/ 06 декабря 2010

Я пытаюсь выяснить, как лучше всего выполнить запрос в NHibernate, чтобы возвращаемые результаты находились между записями с текущим временем> = PublishDateTime и <= ExpiryDateTime </p>

Дата истечения может быть нулевой, поэтому мне нужно это учитывать. Я нашел пару примеров здесь и здесь , но они, кажется, работают по-другому и принимают 2 значения и сравнивают с одним полем БД. Я действительно хочу другой путь неправильно.

Запрос до сих пор:

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

Любые предложения будут приняты!

Ответы [ 2 ]

16 голосов
/ 06 декабря 2010

Самый простой запрос 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>();
0 голосов
/ 07 января 2016

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