Ordernar aleatoriamente uma lista
LINQ (Language Integrated Query), além de oferecer um modelo consistente para trabalhar com dados em vários tipos de fontes de dados e formatos, outra importante característica, é facilidade em criar consultas, desde simples selects à outas mirabolantes expressões que uma query possa conter.
Neste exemplo demonstrarei como é fácil, utilizando LINQ, aplicar uma consulta aletória em uma List<int>
.
O mesmo poderia ser feito em uma lista de objetos do tipo Pessoa ou qualquer outro do seu domínio.
Isto porque o LINQ oferece suporte ao IEnumerable(Of T) ou interfaces derivadas, como o genérico IQueryable(Of T) - chamados de tipos consultáveis.
//Lista de exemplo
var lista = ;
Passando a expressão OrderBy(i => Guid.NewGuid()) a lista retornará aletória.
//Retorna a lista aletória
var lista\_aleatoria = lista.;
Agora, por que isto acontece? Basta saber três coisas para entender:
- GUID: Representa um Globally Unique Identifier, ou seja, um Identificador Único Universal.
- LINQ - Variável de Consulta : Quando você cria uma query com LINQ, o formato dessa consulta será armazenado nessa variável. Mas a consulta ainda não será realizada.
- LINQ - Consulta Adiada : A real execução da consulta é adiada até que você faça a iteração pela variável de consulta em uma instrução foreach. Esse conceito é conhecido como execução adiada.
Sendo assim, cada linha na consulta, a expressão de ordernação será diferente. Obs: No LINQ é possível forçar a execução imediata de uma consulta. Para entender mais sobre LINQ eu indico Introdução às consultas do LINQ (C#) .