NHibernate Query<> 和 QueryOver<> 之间有什么区别?
NHibernate Query<> 和 QueryOver<> 之间有什么区别?
我刚刚在我的当前项目中开始使用NHibernate(使用SQLite),我主要使用Query<>
,因为我习惯了在Linq中编写数据库查询语句。
当我面对一些更复杂的查询时,我研究了一下QueryOver<>
,发现它应该优先于Query<>
,因为"QueryOver语法是NH特定的"。而且,似乎Query<>
可以做的事情QueryOver<>
都可以完成。
所以我开始相应地替换所有使用Query<>
的地方。但没过多久,就出现了第一个“问题”,使用Query<>
似乎更方便。
例如(从表BillingDataEntity
的列CustomNumber
中选择最高的值):
int result = Session.Query().Select(x => x.CustomNumber).OrderByDescending(a => a).FirstOrDefault(); int result = Session.QueryOver ().Select(x => x.CustomNumber).OrderBy(a => a.CustomNumber).Desc.Take(1).SingleOrDefault ();
我不喜欢的是需要显式将结果转换为int,而且Query<>
版本更容易阅读。我是不是完全弄错了查询的方式,换句话说:有更好的方法吗?
我看了一下生成的SQL输出:
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)]
我到底在看什么?这是NHibernate进一步转换为实际数据库查询的“内部”(方法依赖)查询吗?