NHibernate HQL 相当于 T-SQL 的 TOP 关键字是什么?
还有什么是非 HQL 方式来说给我一个班级的前 15 个?
在 HQL 中其实很简单:
var top15 = session.CreateQuery("from SomeEntity")
.SetFirstResult(0)
.SetMaxResults(15)
.List<SomeEntity>();
虽然不知道如何使用标准 API 来做到这一点。
标准 API 方法:
ICriteria criteria = DaoSession.CreateCriteria(typeof(T));
criteria.SetFirstResult(StartIndex);
criteria.SetMaxResults(MaximumObjects);
return criteria.List<T>();
从 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
为了完整起见,这里是使用QueryOver
NHibernate 3.0 中引入的 API 的方法:
var top15 = session.QueryOver<SomeEntity>().Take(15).List();
如果.Skip(someInt)
您需要定义起始索引,例如用于分页,请输入 a。
mookid8000 提供虚假信息。
没有办法用 HQL 设置 SQL TOP N :(
它总是将所有表格下载到 .NET 并获得 TOP,这简直是愚蠢的!