Ventas por mes con LINQ, sin un solo bucle
Agrupar, ordenar y totalizar una lista de ventas en una sola consulta legible.
O problema
Tenés una lista de ventas en memoria y te piden el total y la cantidad de tickets por mes. Con bucles y diccionarios salen treinta líneas; con LINQ, una consulta.
using System;
using System.Linq;
record Venta(DateTime Fecha, string Sucursal, decimal Monto);
class Programa {
static void Main() {
var ventas = new[] {
new Venta(new DateTime(2026, 1, 15), "Centro", 1200m),
new Venta(new DateTime(2026, 1, 28), "Norte", 800m),
new Venta(new DateTime(2026, 2, 3), "Centro", 1500m),
new Venta(new DateTime(2026, 2, 19), "Centro", 700m),
};
var porMes = ventas
.GroupBy(v => new { v.Fecha.Year, v.Fecha.Month })
.OrderBy(g => g.Key.Year).ThenBy(g => g.Key.Month)
.Select(g => new { Mes = $"{g.Key.Year}-{g.Key.Month:00}", Total = g.Sum(v => v.Monto), Tickets = g.Count() });
foreach (var m in porMes)
Console.WriteLine($"{m.Mes}: {m.Total,10:N2} en {m.Tickets} ventas");
}
}
Por que está escrito assim
- GroupBy con un objeto anónimo agrupa por año y mes a la vez: enero de 2026 no se mezcla con enero de 2027.
- Cada grupo se comporta como una lista: por eso se le puede pedir Sum y Count.
- El dinero va en decimal (el sufijo m), nunca en double: los centavos no admiten redondeo binario.
- El formato {m.Total,10:N2} alinea a diez caracteres con dos decimales y separador de miles.
dotnet new console -n Ventas, reemplazá Program.cs con este código y corré dotnet run.
Sobre una lista en memoria esto es instantáneo. Sobre una base con Entity Framework, la misma consulta se traduce a SQL: revisá el SQL generado antes de confiar en que agrupa en el servidor.
Adapte ao seu caso com IA
O botão copia este prompt com o código colado abaixo. Substitua os colchetes pelo que é seu e cole no ChatGPT, Claude, Gemini ou Copilot.
Tengo esta consulta LINQ que agrupa ventas por mes. Extendela para que además agrupe por [SEGUNDA DIMENSIÓN: sucursal, vendedor, categoría], calcule la variación porcentual contra el mes anterior y marque los meses que caen más de [UMBRAL]%. Mis datos vienen de [ORIGEN: lista en memoria, EF Core, CSV]. Mantené decimal para el dinero.
Exemplo escrito e revisado à mão.
Comentários
Ainda não há comentários. O primeiro pode ser o seu.
Adaptou para algo seu?
Me conte o que resolveu com isto, ou o que faltou.