使用Fluent NHibernate选择N个随机行

本文关键字:随机 选择 Fluent NHibernate 使用 | 更新日期: 2023-09-27 17:50:19

如何使用Fluent NHibernate检索N个随机实体?

想要查询:

SELECT TOP 5 * FROM MyTable ORDER BY newid()

我希望能够使用Linq repo的这个,但我不确定如果结果将是最佳的。我不熟悉HQL

使用Fluent NHibernate选择N个随机行

SQL server专用解决方案

其中Word为随机实体:

IQuery q = _unitOfWork.CurrentSession
                      .CreateQuery("from Word order by newid()")
                      .SetMaxResults(5);
var randomWords = q.List<Word>();

旁注:FluentNHibernate不是用于查询的,它只用于映射和配置。查询是"纯"NHibernate的一部分。

不能直接使用LINQ。函数newid()是特定于SQL服务器的,因此在NHibernate中没有直接的等效物。这里可以做的是使用本地SQL通过使用ISessionCreateSQLQuery方法进行查询。

查看这里更多的"深入NHibernate"方法:我如何选择一个随机行使用NHibernate's iccriteria API?

您可以使用Take/Skip linq扩展名:

var resultSet = session.Query<TestTable>().Skip(5).Take(10);

对于PostgreSql DB,这扩展为以下SQL语句:

select TestTable.Id, TestTable.Field from TestTable
LIMIT :p0 OFFSET :p1;