ASP.NET MVC - Como obter registros aleatórios do modelo?
-
08-07-2019 - |
Pergunta
Não sei se existe uma maneira fácil de fazer isso, mas basicamente o que eu gostaria de fazer é:
var highlights = db.Banners.Where(h => h.Category == "highlight").ToList().GetRange(0,4);
Eu tenho esse modelo de faixas onde tenho alguns destaques, mas gostaria de recuperar apenas 4 destaques aleatórios cada vez em ordem diferente.
Portanto, o código que estou usando apenas recuperando um intervalo de destaques [0..4] e, se você tiver menos de 4, ele retorna um erro e eles não serão randomizados.
Alguma idéia de como eu poderia fazer isso facilmente?
O resultado que eu gostaria de ter é um Lista<
Bandeira>
Para passar para a vista, mas cada vez com ordem diferente, como:
[1,3,4,2] || [2,1,4,3] || [12,32,15,3]
Eu acho que é isso :)
Muito obrigado
Solução
Aqui é um exemplo de amostragem aleatória de LINQ no CodeProject
Outras dicas
Para randomizar as faixas e obter os primeiros quatro ou menos, você pode fazer isso:
Random r = new Random(DateTime.Now.Ticks);
var highlights = db.Banners.Where(h => h.Category == "highlight").
OrderBy(h => r.Next()).Take(4)