NHibernate3 Query vs QueryOver

Ty. picture Ty. · Mar 16, 2011 · Viewed 18.5k times · Source

I noticed there are two ways to create nice generic friendly access to nhibernate.

IQueryOver<T, T> query= session.QueryOver<T>().Where(criteria);

and

IQueryable<T> query= session.Query<T>().Where(criteria);

Implementations of each interface.

IQueryOver<TRoot, TSubType> : IQueryOver<TRoot>, IQueryOver

and

IQueryable<out T> : IEnumerable<T>, IQueryable, IEnumerable

IQueryable implements IEnumerable, thus supports all the LINQ friendly things you would expect. I am tending towards this implementation, but was wondering if anyone knew what the purpose of QueryOver was that you cannot accomplish with Query?

Answer

LeftyX picture LeftyX · Mar 16, 2011

QueryOver combines extension methods and lambda expressions:

IList<Cat> cats =
    session.QueryOver<Cat>()
        .Where(c => c.Name == "Max")
        .List();

QueryOver is a strongly-typed querying technology built on top of NHibernate’s Criteria API.

You can read more info here and here.

As far as I know some features in the linq provider are not implemented yet.
I would use QueryOver.
It allows you to write elegant code and it is fully featured.

Something worth reading.