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>();
The NHibernate Query by Criteria API lets you build a query by manipulating criteria objects at runtime. This approach lets you specify constraints dynamically without direct string manipulations, but it doesn't lose much of the flexibility or power of HQL.
createAlias. Join an association, assigning an alias to the joined association. Functionally equivalent to createAlias(String, String, int) using CriteriaSpecification. INNER_JOIN for the joinType.
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.
In the source code for namespace NHibernate.Criterion.Expression
is says that "This class is semi-deprecated use Restrictions"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With