ASP.NET MVC: ¿cómo obtener registros aleatorios del modelo?
-
08-07-2019 - |
Pregunta
No sé si hay una manera fácil de hacerlo, pero básicamente lo que me gustaría hacer es:
var highlights = db.Banners.Where(h => h.Category == "highlight").ToList().GetRange(0,4);
Tengo este modelo de Banners donde tengo algunos aspectos destacados, pero me gustaría recuperar solo 4 aspectos destacados al azar cada vez en un orden diferente.
Entonces, el código que estoy usando solo recupera un rango de [0..4] resaltados y si tiene menos de 4, devuelve un error, y no son aleatorios.
¿Alguna idea sobre cómo podría hacerlo fácilmente?
El resultado que me gustaría tener es una Lista<
Banner>
para pasarla a la vista pero cada vez con diferentes orden como:
[1,3,4,2] || [2,1,4,3] || [12,32,15,3]
Creo que es todo :)
Muchas gracias
Solución
Aquí es un ejemplo de muestreo aleatorio de LINQ en codeproject
Otros consejos
Para aleatorizar banners y obtener los primeros cuatro o menos, puede hacer esto:
Random r = new Random(DateTime.Now.Ticks);
var highlights = db.Banners.Where(h => h.Category == "highlight").
OrderBy(h => r.Next()).Take(4)