ROW_NUMBER() 和 nhibernate - 查找项目的页面
给定一个 ICriteria 对象形式的查询,我想使用 NHibernate (通过投影?)来查找元素的顺序, 其方式相当于使用
SELECT ROW_NUMBER() OVER (...)
在查询中查找特定项目的索引。 (我需要这个来实现分页中的“跳转到页面”功能) 有什么建议吗?
注意:我不想转到给定编号的页面 - 我知道该怎么做 - 我想获取该项目的索引,以便我可以将其除以页面大小并获取页面索引。
given a query in the form of an ICriteria object, I would like to use NHibernate (by means of a projection?) to find an element's order,
in a manner equivalent to using
SELECT ROW_NUMBER() OVER (...)
to find a specific item's index in the query.
(I need this for a "jump to page" functionality in paging)
any suggestions?
NOTE: I don't want to go to a page given it's number yet - I know how to do that - I want to get the item's INDEX so I can divide it by page size and get the page index.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在查看了 NHibernate 的源代码之后,我相当确定不存在这样的功能。
但是,我不介意有人证明我错了。
在我的特定设置中,我确实通过编写一个需要几个 lambda 的方法来解决这个问题(表示键列,以及用于过滤的可选列 - 特定域实体的所有属性)。然后,此方法构建 sql 并调用
session.CreateSQLQuery(...).UniqueResult();
我并不是说这是一个通用解决方案。为了避免使用魔术字符串,我从 这个答案。
这是代码:
你可以像这样使用它:
正如我所说,这对我有用。随着我的前进,我肯定会对其进行调整。 YMMV。
现在,如果OP自己解决了这个问题,那么我很想看看他的解决方案! :-)
After looking at the sources for NHibernate, I'm fairly sure that there exists no such functionality.
I wouldn't mind, however, for someone to prove me wrong.
In my specific setting, I did solve this problem by writing a method that takes a couple of lambdas (representing the key column, and an optional column to filter by - all properties of a specific domain entity). This method then builds the sql and calls
session.CreateSQLQuery(...).UniqueResult();
I'm not claiming that this is a general purpose solution.To avoid the use of magic strings, I borrowed a copy of
PropertyHelper<T>
from this answer.Here's the code:
And you use it like so:
As I said, this works for me. I'll definitely tweak it as I move forward. YMMV.
Now, if the OP has solved this himself, then I would love to see his solution! :-)
ICriteria 有这 2 个功能:
将
SQL 语句转换为使用 ROW_NUMBER (在 sql server 中)或在 MySql 中限制。
因此,如果您想在第三页上有 25 条记录,您可以使用:
ICriteria has this 2 functions:
and
which transform your SQL statement into using ROW_NUMBER (in sql server) or limit in MySql.
So if you want 25 records on the third page you could use:
在尝试自己找到基于 NHibernate 的解决方案后,我最终只是在我碰巧使用的视图中添加了一列:
如果您需要复杂的排序选项,这并没有真正的帮助,但它确实适用于简单的情况。
当然,标准查询看起来像这样:
After trying to find an NHibernate based solution for this myself, I ultimately just added a column to the view I happened to be using:
This doesn't really help if you need complex sorting options, but it does work for simple cases.
A Criteria query, of course, would look something like this: