如何使用Fluent NHibernate检索N个随机实体?
SELECT TOP 5 * FROM MyTable ORDER BY newid()
我希望能够使用Linq repo's,但我不确定结果是否最佳。我不熟悉HQL。
答案 0 :(得分:2)
其中Word
是随机实体:
IQuery q = _unitOfWork.CurrentSession
.CreateQuery("from Word order by newid()")
.SetMaxResults(5);
var randomWords = q.List<Word>();
答案 1 :(得分:1)
附注:FluentNHibernate不用于查询,仅用于映射和配置。查询是“纯粹的”NHibernate的一部分。
你不能直接使用LINQ。函数newid()
是特定于SQL Server的,因此在NHibernate中没有直接的等价物。您可以在此处执行的操作是使用ISession
的{{1}}方法使用本机SQL进行查询。
另请参阅此处了解更多“深入NHibernate”方法: How do I select a Random Row using NHibernate's ICriteria API?
答案 2 :(得分:0)
您可以使用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;