views:

66

answers:

1

Hi, I'm a bit of a NHibernate newbie and Im taking on some code written by another developer. I want to find out how NHibernate converts lambda based criteria into SQL.

I know in Linq to SQL using Lambda expressions on queries means that the whole thing is turned into an expression tree and then into SQL (where possible) by the Linq to SQL provider. This can be seen by doing DataContext.Log = Console.Out.

But what about an NHibernate criteria expression where Linq to NHibernate isnt being used?

The following namespaces are imported...

using NHibernate;
using NHibernate.Criterion;
using NHibernate.LambdaExtensions;

.. and the criteria code looks like this...

    return Session.CreateCriteria<MyObjectType>()
        .Add<MyObjectType>(x => x.Id == id)
        .UniqueResult<MyObjectType>();

Will this be turned into an SQL statement e.g.

Select distinct * from table where id = [param]

... or will the whole dataset be pulled into memory giving a List and then have the lambda expressions applied against the objects. e.g.

return List<MyObject>.Where(x => x.id = id)  [or something similar].

I', not sure if my importing NHibernate.LambdaExtensions provides a sort of translation into SQL.

Thanks in advance.

+1  A: 

It is turned to an HQL statement first (enable logging and look at the console for the statements) and then to an SQL and sent to the database.

It does not select the whole table to memory and filters there.