Как получить N случайных объектов с помощью Fluent NHibernate?
SELECT TOP 5 * FROM MyTable ORDER BY newid()
Я бы хотел использовать репо Linq для этого, но я не уверен, будет ли результат оптимальным. Я не знаком с HQL.
Где Word - случайная сущность:
Word
IQuery q = _unitOfWork.CurrentSession .CreateQuery("from Word order by newid()") .SetMaxResults(5); var randomWords = q.List<Word>();
Примечание: FluentNHibernate не для запросов, а только для отображения и настройки.Запросы являются частью "чистого" NHibernate.
Вы не можете сделать это напрямую с помощью LINQ.Функция newid() специфична для SQL Server, поэтому в NHibernate нет прямого эквивалента.Что вы можете сделать здесь, это запросить с использованием собственного SQL с помощью метода ISession CreateSQLQuery.
newid()
ISession
CreateSQLQuery
См. Также здесь для получения более подробной информации о методе "глубоко в NHibernate": Как выбрать случайную строку с помощью API-интерфейса NHibernate ICriteria?
Вы можете использовать расширения Take / Skip linq:
var resultSet = session.Query<TestTable>().Skip(5).Take(10);
В DB PostgreSql это расширяется до следующего оператора SQL:
select TestTable.Id, TestTable.Field from TestTable LIMIT :p0 OFFSET :p1;