Oracle中的NHibernate分页 - 使用rownum

时间:2012-08-21 12:39:57

标签: c# oracle nhibernate paging

我正在尝试在Oracle DB上的NHibernate中进行分页。但是,SetFirstResult& SetMaxResults不起作用,即使在NHibernate 3.3中(其不可预测且通常返回零结果)。

我现在正试图在查询中使用“rownum”来做同样的事情。我试过这个:

  finalCriteria
  .Add(Restrictions.Between(Projections.SqlProjection("rownum", new string[] { "RowNumber" }, new IType[] { NHibernateUtil.Int64 }), rowIndex, rowIndex + pageSize));

然而它不起作用(ORA-00936:未找到表达式)

有什么建议吗?

这是我使用的方法之一,徒劳无功,SetFirst& SETMAX

finalCriteria.SetFirstResults(pageIndex* pageSize).SetMaxResults(pageSize)

谢谢!

2 个答案:

答案 0 :(得分:1)

不确定它为什么不适合您,但我们在Oracle 11上成功使用SetFirstResult和SetMaxResult。这是我们的代码,与您的代码非常相似:

criteria.SetFirstResult(pageSize * Offset);
criteria.SetMaxResults(pageSize);

我从未发现任何问题。你检查了hibernate创建的sql语句吗?

答案 1 :(得分:0)

我已经使用Oracle和NHibernate几年了,除了在几个极端情况下,从未遇到过分页问题。 SetFirstResult和SetMaxResults有效。您可以使用NHibernate Profiler http://www.nhprof.org并查看实际创建的sql。这可能会帮助你