使用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
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通过使用ISession
的CreateSQLQuery
方法进行查询。
查看这里更多的"深入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;