nhibernate

QueryOver Queries

Remarks#

NHibernate 3.0 introduced the QueryOver API, which combines the use of extension methods and lambda expressions to provide a statically typesafe wrapper around the ICriteria API. The ICriteria API is NHibernate’s implementation of the Query Object pattern.

Basic query

A basic QueryOver query is performed against an ISession using the QueryOver<T> method, where T is the type of a mapped entity.

IList<Customer> customers = session.QueryOver<Customer>()
    .Where(c => c.LastName == "Simpson")
    .List();

Query with join using JoinQueryOver

To join and and for instance filter on the joined table use JoinQueryOver.

IList<Customer> customers = session.QueryOver<Customer>()
    .Inner.JoinQueryOver(x => x.Organisation)
    .Where(y => y.Name == "Acme Inc")
    .List();

Query with join using JoinAlias

It’s possible to use JoinAlias method to join several tables. It’s useful when it’s needed to specify some property from the joined table in the select statement:

Customer customerAlias = null;
Organization organizationAlias = null;

IList<Customer> customers = session.QueryOver(() => customerAlias)
    .Left.JoinAlias(x => x.Organization, () => organizationAlias)
    .Where(customer => customer.Name == "Customer Name")
    .And(() => customerAlias.Age > 18)
    .AndNot(() => organizationAlias.Name == "Forbidden Organization")
    .List();

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow