23

If I search for NHibernate Criteria API query examples in internet there are examples that use Restrictions and others use Expression. What are the differences between those two?

For example:

posts = session.CreateCriteria<Post>()
    .Add(Expression.Eq("Id", 1))
    .List<Post>();

posts = session.CreateCriteria<Post>()
    .Add(Restrictions.Eq("Id", 1))
    .List<Post>();
Rippo
  • 22,117
  • 14
  • 78
  • 117
Darius Kucinskas
  • 10,193
  • 12
  • 57
  • 79

3 Answers3

18

I think Restrictions were released in NH2 and is now the favoured way.

According to Resharper whenever I use Expression I get a hint to say Access to a static member of a type via a derived type

Also according to this post by Ayende:-

Prefer to use the Restrictions instead of the Expression class for defining Criteria queries.

Rippo
  • 22,117
  • 14
  • 78
  • 117
14

In the source code for namespace NHibernate.Criterion.Expression is says that "This class is semi-deprecated use Restrictions"

Benjamin
  • 291
  • 3
  • 12
1

Expression inherits from Restrictions but it is recommended to use Restrictions. Expression is apparently deprecated.

According to Ayende (old post about NH 2.0), documentation will usually refer to Restrictions.

Florian Lim
  • 5,332
  • 2
  • 27
  • 28