我正在编写一个选择支持分页的数据的 NHibernate 标准。正如Ayende Rahien所建议的,我正在使用COUNT(*) OVER()
SQL Server 2005(+) 中的表达式来获取可用行的总数。我需要这个数字才能计算总共有多少页。这个解决方案的美妙之处在于我不需要执行第二个查询来获取行数。
但是,我似乎无法编写工作条件(Ayende 仅提供 HQL 查询)。
这是一个 SQL 查询,它显示了我想要的,它工作得很好。请注意,我故意省略了实际的分页逻辑以专注于问题:
SELECT Items.*, COUNT(*) OVER() AS rowcount
FROM Items
这是HQL:
select
item, rowcount()
from
Item item
请注意,该rowcount()
函数在自定义 NHibernate 方言中注册并解析为COUNT(*) OVER()
SQL。
要求是使用标准来表达查询。不幸的是,我不知道如何正确处理:
var query = Session
.CreateCriteria<Item>("item")
.SetProjection(
Projections.SqlFunction("rowcount", NHibernateUtil.Int32));
每当我添加投影时,NHibernate 都不会选择item
(就像没有投影一样),rowcount()
而我确实需要两者。另外,我似乎无法item
整体进行项目,只有它的属性,我真的不想列出所有这些。
我希望有人对此有解决方案。不管怎么说,还是要谢谢你。