Início > C# > Trabalhando com Linq e C# (Parte 2)

Trabalhando com Linq e C# (Parte 2)

Continuando nosso estudo sobre o Linq com o C#, irei mostrar agora como resolver uma situação onde precisamos filtrar os resultados, imagine a seguinte situação: Imagine daquela nossa lista (Lista de Pessoas), tivéssemos o interesse de buscar somente as Pessoas que tenham 10 anos de idade, como fazer isso? Simples, neste caso iremos utilizar o Where, sintaticamente ele possui uma semelhança com o método Select (usado anteriormente), porém seus parâmetros indicam quais dados serão filtrados, veja um exemplo de como ficaria a implementação:

List<Pessoa> listaPessoa = CarregarLista();

IEnumerable<Pessoa> listaFiltrada = listaPessoa.Where(pessoa => pessoa.Idade == 10);

foreach (Pessoa pessoa in listaFiltrada)

{

    MessageBox.Show(pessoa.Nome);

}

 

 

E se houvesse a necessidade de fazer ordenação desta lista, ou seja, eu gostaria de ordenar a listaPessoa por nome, é possível ? Sim, é possível, e irei demonstrar duas formas de fazer isso.

Anteriormente, em coleções que implementam o IList, usávamos o método Sort () com um delegate para fazer tal operação, veja o exemplo abaixo, de uma ordenação usando o método Sort.

List<Pessoa> listaPessoa = CarregarLista();

listaPessoa.Sort(delegate(Pessoa p, Pessoa p2) { return p.Nome.CompareTo(p2.Nome); });

 

Veja que neste caso estamos fazendo a ordenação por Nome, ou seja, crio dois objetos e faço a chamada ao método CompareTo para fazer a comparação das propriedades, depois retornar os objetos ordenados.

Podemos também utilizar o método OrderBy. Como ocorre com os métodos Select() e Where(), ele espera um método como seu argumento e identifica as expressões que você quer utilizar parar ordenar os dados.

Exemplo:

List<Pessoa> listaPessoa = CarregarLista();

IEnumerable<Pessoa> listaOrdenada = listaPessoa.OrderBy(pessoa => pessoa.Nome);

 

Repare com o método OrderBy() utilizando uma expressão lambda  deixa o código mais limpo e mais fácil de ser entendido.

E se a idéia fosse fazer uma ordenação decrescente, como faríamos isso ? Simples, em vez de utilizar o método OrderBy() , vamos utilizar o método OrderByDescending(), veja um exemplo:

List<Pessoa> listaPessoa = CarregarLista();

IEnumerable<Pessoa> listaOrdenada = listaPessoa.OrderByDescending(pessoa => pessoa.Nome);

 

E se a idéia fosse fazer a ordenação por mais de um campo, utilizaríamos os métodos ThenBy e ThenByDescending (Ordenação decrescente), após o método OrderBy,  veja um exemplo abaixo:

IEnumerable<Pessoa> listaOrdenada = listaPessoa.OrderByDescending(pessoa => pessoa.Nome)

                .ThenBy(pessoa => pessoa.SobreNome);

 

Até mais, na próxima etapa irei demostrar alguns exemplos de como agrupar e fazer junção de dados.

 

Categorias:C#
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: