9

今日の時間が >= PublishDateTime と <=ExpiryDateTime であるエントリの結果が返されるように、NHibernate で最適なクエリを実行する方法を見つけようとしています。

有効期限は null になる可能性があるため、それを許可する必要があります。ここここでいくつかの例を見つけましたが、それらは別の方法で機能し、2 つの値を受け入れて 1 つの DB フィールドと比較するようです。私は本当に反対の方法が間違っていることを望んでいます。

これまでのクエリ:

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

どんな提案でも大歓迎です!

4

2 に答える 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>();
于 2010-12-06T20:02:36.173 に答える