NHibernate Criteria API提供了一种类型安全的方式来构建查询。要获取"Top N"记录,可以使用以下几种方法:
这是最直接的方法,通过设置最大返回结果数来限制查询结果。
using NHibernate;
using NHibernate.Criterion;
// 获取ISession实例
ISession session = sessionFactory.OpenSession();
// 创建Criteria查询
ICriteria criteria = session.CreateCriteria<YourEntity>();
// 设置排序(可选,但通常需要)
criteria.AddOrder(Order.Desc("SomeProperty"));
// 设置最大返回结果数(Top N)
criteria.SetMaxResults(10); // 获取前10条记录
// 执行查询
IList<YourEntity> results = criteria.List<YourEntity>();
QueryOver是Criteria API的强类型版本,更安全且易于维护:
using NHibernate;
using NHibernate.Criterion;
ISession session = sessionFactory.OpenSession();
var results = session.QueryOver<YourEntity>()
.OrderBy(x => x.SomeProperty).Desc
.Take(10) // 等同于SetMaxResults(10)
.List();
如果需要分页获取Top N,可以结合SetFirstResult和SetMaxResults:
ICriteria criteria = session.CreateCriteria<YourEntity>();
criteria.AddOrder(Order.Desc("SomeProperty"));
criteria.SetFirstResult(0); // 从第0条开始
criteria.SetMaxResults(10); // 取10条
IList<YourEntity> results = criteria.List<YourEntity>();
criteria.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("Name")));
criteria.SetMaxResults(10);
NHibernate的Criteria API/QueryOver提供了一种灵活且类型安全的方式来构建查询,特别适合动态查询场景。
没有搜到相关的文章