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

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top