Páginas

domingo, 2 de junho de 2013

LINQ: Utilizando OrderBy e GroupBy


OrderBy

Olá! Vamos Agrupar e Ordenar dados com LINQ????

Então utilizando os mesmos dados dos Posts anteriores, faremos uma ordenação por nome utilizando LINQ.

Ordenação pra quem trabalha com programação é coisa corriqueira logo, não me alongarei no nessa parte ;-).

Figura 1 - Produtos da Categoria 1 ordenados por Nome


O código abaixo gera o resultado acima: produtos da categoria 1 ordenados por nome.

protected void Page_Load(object sender, EventArgs e)
        {
            NORTHWNDEntities dc = new NORTHWNDEntities();

            #region OrderBy

            gdvProdutos.DataSource = from p in dc.Products
                                     where p.CategoryID == 1
                                     orderby p.ProductName
                                     select p;
            gdvProdutos.DataBind();

            #endregion
          
        }

GroupBy


Agora sim! Mesmo sendo outro assunto corriqueiro para quem trabalha com programação, vou supor que apenas os novatos estão lendo essa parte hehehehe.

Primeiro vou discorrer sobre o que seria agrupar.  Agrupar na sua definição pura:

agrupar - conjugação

verbo transitivo
1.
pôr ou dispor em grupo

2.
juntar; reunir

3.
associar

agrupar In Infopédia [Em linha]. Porto: Porto Editora, 2003-2013. [Consult. 2013-06-03].
Disponível na www: http://www.infopedia.pt/lingua-portuguesa/agrupar
>.

Logo seria separar em grupos coisas que são semelhantes (ou iguais), segue uma imagem de autoria própria que mostra um agrupamento:

Figura 2 - Agrupamento de figuras pela quantidade de lados
As figuras estão Agrupadas de acordo com o estabelecido pelo programador, mas há outras associações (mais sérias inclusive) que podem ser feitas no dia-a-dia de trabalho. Seguem exemplos de agrupamento:
  •          Pessoas por estado
  •          Quantidade de compras por cliente
  •          Valor de compras por cliente
  •          Pessoas por departamento
  •          Pessoas por faixa de salário

Viu? São inúmeras as aplicações de agrupamento!

Segue a imagem dos produtos agrupados por categoria.

Figura 3 - Quantidade de produtos por categoria
*Se quiser conferir o valor da informação, na Figura 1 contém apenas os 
produtos da Categoria 1.

Segue o código que gerou a Figura 3.

protected void Page_Load(object sender, EventArgs e)
        {
            NORTHWNDEntities dc = new NORTHWNDEntities();         

       gdvQuantidadeProdutoPorCategoria.DataSource =
     from p in dc.Products
     group p by p.CategoryID into g
                  select new { CodCategoria = g.Key, ProdPorCateg = g.Count() };

            gdvQuantidadeProdutoPorCategoria.DataBind();
        }
   

Que a palavra group by faz o agrupamento disso ninguém tem dúvida J. Agora o que fazer com isso é que é o problema...

Vamos analisar: group p by p.CategoryID into g

p são todos os produtos que estão na tabela dc.Products, no que você comanda group p by p.CategoryID você já está dividindo os produtos pelas suas categorias.

A segunda parte do comando é into g, isso significa que o resultado dessa divisão estará dentro de g!

A partir daí é só brincar! Você pode contar (g.Count()) a quantidade de produtos dentro de cada categoria, somar os valores dos produtos dentro de cada categoria, etc.




                              

Nenhum comentário:

Postar um comentário