Um recurso super legal que foi implementado no .Net 3.5 e que já é considerado um grande avanço é o LINQ. O Ivan já tinha começado a falar do assunto no post anterior, portanto sugiro que antes de ler este post dê uma olhada neste aqui. Se você já leu, vamos aprofundar um pouco mais no tema.

Digamos que temos uma coleção de “profissionais”, e que cada profissional tem Nome, Sexo e Equipe. Temos apenas um método em nossa camada de acesso a dados que retorna todos os profissionais cadastrados, ou seja, vamos ter um retorno como este:

var todos = new Collection<Profissional>
{
     new Profissional { Nome = "André Paulovich", Sexo = true, Equipe = ".Net"},
     new Profissional { Nome = "Ivan Paulovich", Sexo = true, Equipe = ".Net"},
     new Profissional { Nome = "Camila Campos", Sexo = false, Equipe = "Redação"},
     new Profissional { Nome = "Renato Lima", Sexo = true, Equipe = "Flex"},
     new Profissional { Nome = "Luciano Lima", Sexo = true, Equipe = ".Net"},
     new Profissional { Nome = "Luciana Perdigão", Sexo = false, Equipe = "Design"},
     new Profissional { Nome = "Daniele Almeida", Sexo = false, Equipe = "DBA"},
     new Profissional { Nome = "Geraldo Magella", Sexo = true, Equipe = "Infra-estrutura"},
     new Profissional { Nome = "Giovanni Zanandreis", Sexo = true, Equipe = "DBA"}
};

Mas o nosso problema é que precisamos mostrar os homens num GridView e as mulheres em outro. Antes de conhecer o LINQ talvez muitos fizessem algo como:

var homens = new Collection<Profissional>();
var mulheres = new Collection<Profissional>();

foreach (var profissional in todos)
{
    if (profissional.Sexo)
    {
        homens.Add(profissional);
    }
    else
    {
        mulheres.Add(profissional);
    }
}

O que funcionaria perfeitamente, mas agora podemos realizar consultas em coleções facilmente escrevendo em uma sintaxe que lembra bastante o TransactSQL, ou seja, é possível extrair outras coleções de uma coleção maior sem a necessidade de percorrer a lista testando um a um os objetos de maneira muito mais rápida e simples.

Veja como ficaria nossa solução de separar nossos profissionais em dois grupos de acordo com o Sexo.

Para ter uma coleção apenas com as mulheres:

var mulheres = from mulher in todos 
         where mulher.Sexo = false
         select mulher;

E para ter uma coleção apenas com os homens:

var homens = from rapaz in todos
        where rapaz.Sexo = true
        select rapaz;

Até mais, depois posto aqui outras consultas com LINQ.