Один из способов добиться эффективного результата - добавить к вашим данным столбец Shuffle
, который заполнен случайным числом int (при создании каждой записи).
Запрос на доступ к таблице становится ...
Random random = new Random();
int seed = random.Next();
result = result.OrderBy(s => (~(s.Shuffle & seed)) & (s.Shuffle | seed)); // ^ seed);
Это делает операцию XOR в базе данных и упорядочивает по результатам этого XOR.
Преимущества: -
- Эффективно: SQL обрабатывает
заказывать, не нужно получать все
таблица
- Повторяется: (хорошо для
тестирование) - можно использовать тот же случайный
семя, чтобы генерировать тот же случайный
заказ
- Работает на большинстве (всех?) Поддерживаемых Entity Framework
базы данных
Это подход, используемый моей системой домашней автоматизации для рандомизации списков воспроизведения. Каждый день он выбирает новое начальное число, давая последовательный порядок в течение дня (что позволяет легко делать паузу / возобновление), но каждый новый взгляд на каждый плейлист по-новому.