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

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top