2012-05-21 3 views
0

Об этом было задано несколько раз, но я не смог найти окончательного ответа на этот вопрос. Может кто-нибудь помочьnhibernate select n случайные уникальные записи

Я хочу, чтобы иметь возможность запросить мою базу данных (будет мой sqlServer И mysql) с помощью nhibernate, чтобы получить X количество строк. эти цифры должны быть уникальными. Я выбираю 250 из 350, поэтому мои шансы высоки, что у меня будут дубликаты (потому что случайный постулат подразумевает уникальный).

Это должно работать как для mysql, так и для sql-сервера.

, так как я выборе более 70% стола уже, я не возражаю выбрать все записи, а также с помощью LINQ к Пули из 250 уникальных значений (если это возможно)

независимо имеет наименьшее влияние на моя системная накладная.

Спасибо!

ответ

0

Вы можете заказать свои результаты с помощью RAND() или NEWID() и выбрать лучшие 250 - результаты будут отличаться и случайны, с точки зрения эффективности это будет более эффективно, чем получение всех 350 результатов, а затем их упорядочение случайным образом в коде - ЕСЛИ ВЫ ИГНОРИРУЕТСЯ КАРТОЧКУ

Однако, если вы делаете кеширование результатов, со временем, вероятно, будет значительно более эффективно извлекать 350 результатов в кеш (желательно с использованием кэша второго уровня NHibernate), а затем сортировать их в код, используя что-то вроде:

var rand = new Random();  
var results = Session.CreateCriteria<MyClass>() 
    .SetCacheable(true) 
    .List() 
    .OrderBy(x => rand.Next()); 
0

Вы ищите отличительные знаки, добавьте . Отклонено() до .ToList();

0

Я думаю, вы ответили сами.

Запрос на полный стол для 350 записей будет накладывать меньше нагрузки на сервер, чем сложный запрос рандомизации и подкачки на 250 (обычно это делается путем добавления уникального идентификатора к строкам во внутреннем запросе, а затем сортировки с использованием его . Невозможно сделать это с помощью LINQ).

Вы можете даже кэшировать результаты, а затем рандомизировать список в памяти каждый раз, чтобы получить 250 разных записей.

Смежные вопросы