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:
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.