使用Fluent NHibernate选择N个随机行

时间:2011-04-17 10:41:12

标签: c# sql-server fluent-nhibernate random

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

所需查询:

SELECT TOP 5 * FROM MyTable ORDER BY newid()

我希望能够使用Linq repo's,但我不确定结果是否最佳。我不熟悉HQL。

3 个答案:

答案 0 :(得分:2)

SQL Server特定的解决方案

其中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;