23

NHibernate HQL 相当于 T-SQL 的 TOP 关键字是什么?

还有什么是非 HQL 方式来说给我一个班级的前 15 个?

4

5 回答 5

33

在 HQL 中其实很简单:

var top15 = session.CreateQuery("from SomeEntity")
                .SetFirstResult(0)
                .SetMaxResults(15)
                .List<SomeEntity>();

虽然不知道如何使用标准 API 来做到这一点。

于 2009-02-16T23:45:28.727 回答
10

标准 API 方法:

ICriteria criteria = DaoSession.CreateCriteria(typeof(T));
criteria.SetFirstResult(StartIndex);
criteria.SetMaxResults(MaximumObjects);
return criteria.List<T>();
于 2009-02-16T23:48:43.430 回答
4

从 NHibernate 3.2 开始,您可以SKIP n / TAKE n在查询结束时在 hql 中使用。它在您不能使用的子查询中非常有用SetMaxResults

例如:

select l, (select u from User u where u.Location = l order by u.Date asc take 1) 
from Location l
于 2015-04-09T12:29:11.743 回答
0

为了完整起见,这里是使用QueryOverNHibernate 3.0 中引入的 API 的方法:

var top15 = session.QueryOver<SomeEntity>().Take(15).List();

如果.Skip(someInt)您需要定义起始索引,例如用于分页,请输入 a。

于 2012-12-05T20:53:09.513 回答
-2

mookid8000 提供虚假信息。

没有办法用 HQL 设置 SQL TOP N :(

它总是将所有表格下载到 .NET 并获得 TOP,这简直是愚蠢的!

于 2013-06-14T15:17:28.563 回答