Выберите N Случайных Рядов с Свободным NHibernate - PullRequest
2 голосов
/ 17 апреля 2011

Как получить N случайных объектов с помощью Fluent NHibernate?

Желаемый запрос:

SELECT TOP 5 * FROM MyTable ORDER BY newid()

Я бы хотел использовать репо Linq для этого, но я не уверен, будет ли результат оптимальным. Я не знаком с HQL.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2011

Решение для SQL Server

Где Word - случайная сущность:

IQuery q = _unitOfWork.CurrentSession
                      .CreateQuery("from Word order by newid()")
                      .SetMaxResults(5);

var randomWords = q.List<Word>();
1 голос
/ 17 апреля 2011

Примечание: FluentNHibernate не для запросов, а только для отображения и настройки.Запросы являются частью "чистого" NHibernate.

Вы не можете сделать это напрямую с помощью LINQ.Функция newid() специфична для SQL Server, поэтому в NHibernate нет прямого эквивалента.Что вы можете сделать здесь, это запросить с использованием собственного SQL с помощью метода ISession CreateSQLQuery.

См. Также здесь для получения более подробной информации о методе "глубоко в NHibernate": Как выбрать случайную строку с помощью API-интерфейса NHibernate ICriteria?

0 голосов
/ 04 сентября 2012

Вы можете использовать расширения 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...