NHibernate3 Query vs QueryOver
QueryOver syntax is NHibernate specific, thus it has many powerful methods that you just can't match in LINQ.
As LeftyX said, the LINQ implementation for NH is not complete, and I've had several headaches with it. For example, recently I had problems using the 2nd level cache, the Future values, and NH Spatial extensions with LINQ, all due to an incomplete implementation or bugs (and not mentioning the performance of some generated SQL, which is sometimes pretty awful).
In all these cases I had to use QueryOver, and after surpassing the learning-curve, is has, IMHO, a much nicer syntax than LINQ.
But LINQ via Query also has advantages; like being ORM agnostic (which might leverage a cleaner repository architecture), and for simple queries it is more than enough.
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.