我一直在疯狂地试图弄清楚如何从NHibernate QueryOver返回ROW_NUMBER()
(不是行数)。现在这已成为学习练习的平等部分,所以我理解有一些简单的替代方法,例如返回整个集合并迭代它。但是,让我们坚持学习挑战。
NHibernate可以返回查询的ROW_NUMBER()
吗?
用例:我想返回按创建日期排序的组内发票的等级。排名是它在列表中出现的顺序。理想情况下,我不想将整个列表返回到记录集中,只需获得单个项目的排名ROW_NUMBER()
即可。希望这是有道理的。
我似乎无法弄清楚如何返回ROW_NUMBER()
因为NHibernate要求将每个属性映射到Invoice类,即使我返回object[]
。
__ hibernate_sort_row 是NHibernate创建的ROW_NUMBER()别名。
var q = session.QueryOver<Invoice>()
.OrderBy(x => x.Created).Asc
.Where(x => x.Active == true)
.Where(x => x.Group == grp)
.SelectList(list => list
.Select(Projections.Property("Id"))
.Select(Projections.Property("Name"))
.Select(Projections.GroupProperty("__hibernate_sort_row")) // <- fails because there is no mapping...
).List<object[]>();