我刚开始在我当前的项目中使用 NHibernate(使用 SQLite),而且我主要使用的是 NHibernate Query<>
,因为我熟悉在 Linq 中编写数据库查询。
当我遇到一些更复杂的查询时,我做了一些研究QueryOver<>
并认为应该优先考虑它,Query<>
因为"QueryOver syntax is NH specific"。此外,似乎没有什么Query<>
可以做却做不到QueryOver<>
。
所以我开始Query<>
相应地替换所有用法。不久之后,我遇到了第一个“问题”,使用Query<>
起来似乎更方便了。CustomNumber
示例(从表中的列中选择最大值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>();
我不喜欢的是需要将结果显式转换为 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 进一步转换为实际数据库查询的“内部”(方法相关)查询吗?