Group by en linq es muy parecido al usado en sql pero con las expresiones lamdas que ya concemos podemos hacer todo lo que conocesmo hasta el momento en sql desde C#.
En este articulo conoceremos como funciona el groupby de linq con ejemplos y una aplicacion para descargar.
Como funciona el group by de linq?
En LINQ, la agrupación de elementos se logra a través del método GroupBy(). El método GroupBy() puede tomar uno o más parámetros; sin embargo, para comenzar a entender cómo funciona es importante empezar por las situaciones donde solo se necesita un parámetro.

Sintaxis linq C# group by
La sintaxis básica de group by en LINQ es definir el atributo que utilizará para agrupar los elementos y luego el tipo de datos devueltos por groupby:
`var group = listaElementos.GroupBy(elemento => elemento.Atributo)`
Donde «elemento» se refiere al objeto iterado en la lista de elementos (p.e., un pedido, un cliente, etc.), y «atributo» es el campo a partir del cual los datos serán agrupados.
El group by LINQ devuelve un nuevo objeto que contiene los resultados agrupados por el atributo que indicamos, para luego poder acceder a sus propiedades e información; de esta manera, podemos obtener resultados útiles como por ejemplo, conocer los pedidos de cada uno de los clientes.
Su sintaxis es la siguiente:
var
agrupacion =
from
p
in
listaPedido
group
p
by
p.productoid
into
grupo
select
grupo;
El resultado, seria una lista de grupos, donde cada grupo contiene los elementos agrupados por el atributo que especificamos. como vermos es importa el uso del select en linq para completar la consulta.
Foreach Linq group by
En consecuencia, podemos organizar fácilmente dos bucles foreach para recorrer con el primero la lista de claves por las que se agrupa (grupo.Key) y usar el ciclo interno para explorar la lista de objetos que cumplen con los criterios de grupos:
foreach
(
var
grupo
in
agrupacion)
{
Console.WriteLine(
"ID producto: "
+ grupo.Key);
foreach
(
var
objetoAgrupado
in
grupo)
Console.Write(
"\t\tPedido nº "
+ objetoAgrupado.Id +
": "
+ objetoAgrupado.FechaPedido +
"]"
+ Environment.NewLine);
}
El resultado seria :
ID producto: 1
Pedido nº 39: 13/08/2019
Pedido nº 41: 21/08/2019
ID producto: 2
Pedido Nº 40: 15/08/2019] etc.
Con group by LINQ podemos agrupar elementos y obtener datos útiles para nuestras aplicaciones, lo que nos permite analizar y realizar predicciones con los datos que tenemos.
Expresiones aritmeticas con linq Sum, Count Avg, Min Max
en linq podemos no solo agrupar por un campo sino que tambien podemos usar expresiones aritmeticas para calcular ciertos valores de nuestros registros. tal como hacemos en sql group by la sintaxis para esto seria.
Ejemplo linq count
var group = listaElementos.GroupBy(elemento => elemento.Atributo)
.Select (g => new {
campoAgrupado = g.Key,
Contador = g.Count()
});
Esto nos da como resultado un nuevo objeto con la cantidad de los elementos agrupados por el atributo que especificamos . los demas metodos serian igualmente simples te recomiendo aprender como funcion el having count de sql.
Ejemplo linq max
var group = listaElementos.GroupBy(elemento => elemento.Atributo)
.Select (g => new {
campoAgrupado = g.Key,
Maximo = g.Max()
});
Esto nos devuelve el valor maximo de los elementos agrupados por el atributo especificado . en este caso seria el valor mas alto de cada grupo de elementos agrupados. para mas informacion te recomiendo ver como funcion la funcion max
Ejemplo linq sum
var group = listaElementos.GroupBy(elemento => elemento.Atributo)
.Select (g => new {
campoAgrupado = g.Key,
Suma = g.Sum()
});
Esto devuelve la sumatoria de los valores de los elementos agrupados por el atributo especificado .
Usando funcion average en linq
var group = listaElementos.GroupBy(elemento => elemento.Atributo)
.Select (g => new {
campoAgrupado = g.Key,
Promedio = g.Average()
});
Esto devuelve el promedio de los valores de los elementos agrupados por el atributo especificado .
Agrupar por mas de una columna
En linq al igual que en sql los group by se puede utilizar con mas de una columna para hacer esto tenemos que indicarle a group by los atributos que queremos utilizar para hacer el agrupamiento
Ejemplo group linq Por Mas De Una Columna
var group = listaElementos.GroupBy(elemento => new { elemento.AtributoA, elemento.Atributob})
.Select (g => new {
camposAgrupados = g.Key,
Suma = g.Sum()
});
Esta expresion nos devuelve un objeto con la sumatoria de los valores de los elementos agrupados por atributoA y atributoB.
Descargar aplicacion con ejemplos
Esta aplicacion te permitira practicar desde visual studio o cualquier otro ide de tu preferencia como funcinan los group by de linq.
Con group by LINQ podemos agrupar elementos, realizar operaciones aritméticas con ellos y obtener información útil para nuestras aplicaciones. Esta técnica nos ayuda a analizar la información que poseemos para sacar conclusiones y tomar mejores decisiones basadas en los datos. ¡Intenta utilizando group by LINQ para descubrir nuevos patrones en tu código!
Hasta la proxima !!
Gracias :D!!