I just started with NHibernate (using SQLite) in my current project and I mostly used Query<>
, because I was familiar writing db queries in Linq.
When I was confronted with some more complex queries, I did some research on QueryOver<>
and figured that it should be favored over Query<>
because "QueryOver syntax is NH specific". Also, there seems to be nothing that Query<>
can do that QueryOver<>
can't accomplish.
So I began replacing all usages of Query<>
accordingly. It wasn't long before I had the first "issue" where using Query<>
seemed just more convenient.
Example (select highest value from column CustomNumber
in table BillingDataEntity
):
int result = Session.Query<BillingDataEntity>().Select(x => x.CustomNumber).OrderByDescending(a => a).FirstOrDefault();
int result = Session.QueryOver<BillingDataEntity>().Select(x => x.CustomNumber).OrderBy(a => a.CustomNumber).Desc.Take(1).SingleOrDefault<int>();
What I dislike is the need to explicitly cast the result to int and that the the Query<> version is just easier to read. Am i getting the query totally wrong, or in other words: Is there a better way to do it?
I took a look at the generated SQL output:
NHibernate: select billingdat0_.CustomNumber as col_0_0_ from "BillingDataEntity" billingdat0_ order by billingdat0_.CustomNumber desc limit 1
NHibernate: SELECT this_.CustomNumber as y0_ FROM "BillingDataEntity" this_ ORDER BY this_.CustomNumber desc limit @p0;@p0 = 1 [Type: Int32 (0)]
What exactly am i looking at? Is this the "internal" (method dependent) query that NHibernate further translates into the actual database query?