Improve NHibernate QueryOver with Restrictions and ICriterion

Goals

Produce compact and comprehensive code using NHibernate QueryOver, Restrictions and ICriterion.

Context

We will take an example with an entity Period, defined by a name, a start date and a end date.

Period

Needs

We want to request database to get periods corresponding some criteria :

  • all the periods that contains a date
  • all the periods that overlap another period

Implementation

We will use PeriodCriteriaBuilder to build the ICriterion blocks :

Some methods build small criteria :

  • BuildBeginBeforeOrEqualCriterion(DateTime date)
  • BuildEndAfterOrEqualCriterion(DateTime date)
  • BuildBeginBetweenCriterion(DateTime start, DateTime end)
  • BuildEndBetweenCriterion(DateTime start, DateTime end)

Then we can combine them with logical Restrictions expression to provide more advanced predicates :

  • BuildBeginOrEndBetweenCriterion(DateTime start, DateTime end)
  • BuildContainsDateCriterion(DateTime date)
  • BuildContainsStartOrEndDateCriterion(DateTime start, DateTime end)
  • BuildOverlapsPeriodCriterion(DateTime start, DateTime end)

PeriodCriteriaBuilder

QueryOverPeriod

Usage

Category