Una manera de lograr de manera eficiente es agregar una columna a sus datos Shuffle
que se completa con un int aleatorio (a medida que se crea cada registro).
la consulta para acceder a la tabla a continuación, se convierte en ...
Random random = new Random();
int seed = random.Next();
result = result.OrderBy(s => (~(s.Shuffle & seed)) & (s.Shuffle | seed)); //^seed);
Esto hace una operación XOR en la base de datos y órdenes por los resultados de esa XOR.
Ventajas: -
- eficiente: SQL se encarga de la ordenación , no hay necesidad de buscar a toda la tabla
- repetible: (bueno para pruebas) - puede usar la misma semilla aleatoria para generar el mismo al azar fin
- funciona en la mayoría (todos?) Entity Framework admite bases de datos
Este es el enfoque utilizado por mi sistema domótico para aleatorizar listas de reproducción. Escoge una nueva semilla cada día, dando un orden constante durante el día (lo que permite una fácil pausa/reanudación de las funciones), pero una nueva mirada a cada lista de reproducción cada nuevo día.
¿Estás diciendo que quieres la lista completa aleatorizada y luego quieres recuperar los primeros 50 elementos? –
Esta pregunta no duplica la pregunta vinculada. Esta pregunta específicamente denota ASP.NET que requiere acceso aleatorio ThreadSafe. La pregunta vinculada no menciona a ThreadSafe –