Obs: Código em C# 3.0 (Visual Studio 2008)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;
namespace WindowsFormsApplication1
{
class Transacao
{
public long Id { get; set; }
public string Terminal { get; set; }
public DateTime Data { get; set; }
public decimal Valor { get; set; }
public Transacao(long id, string terminal, DateTime data, decimal valor)
{
Id = id; Terminal = terminal; Data = data; Valor = valor;
}
public override string ToString()
{
return String.Format("{0} - {1} - {2:d} - {3:C}",
Id, Terminal, Data, Valor);
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var transacoes = new List<Transacao>() {
new Transacao(1, "terminal 1", new DateTime(2008, 12, 1), 200.00m),
new Transacao(2, "terminal 1", new DateTime(2008, 12, 2), 400.00m),
new Transacao(3, "terminal 2", new DateTime(2008, 12, 2), 700.00m),
new Transacao(4, "terminal 2", new DateTime(2008, 12, 3), 800.00m),
new Transacao(5, "terminal 1", new DateTime(2008, 12, 3), 800.00m)
};
Console.WriteLine("==== Transações Agrupadas Por Data ====");
var transacoesAgrupadasPorData = from t in transacoes
group t by t.Data into grupoPorData
orderby grupoPorData.Key
select grupoPorData;
foreach (var g in transacoesAgrupadasPorData)
{
Console.WriteLine("--- Data : {0:d} ---", g.Key);
foreach (var t in g)
{
Console.WriteLine(t);
}
Console.WriteLine ("Soma = {0:C}", g.Sum(t => t.Valor));
}
Console.WriteLine("==== Transações Agrupadas Por Terminal ====");
var transacoesAgrupadasPorTerminal = from t in transacoes
group t by t.Terminal into grupoPorTerminal
orderby grupoPorTerminal.Key
select grupoPorTerminal;
foreach (var g in transacoesAgrupadasPorTerminal)
{
Console.WriteLine("--- Terminal : {0:d} ---", g.Key);
foreach (var t in g)
{
Console.WriteLine(t);
}
Console.WriteLine("Soma = {0:C}", g.Sum(t => t.Valor));
}
}
}
}
Saída esperada:
==== Transações Agrupadas Por Data ====
--- Data : 01/12/2008 ---
1 - terminal 1 - 01/12/2008 - R$ 200,00
Soma = R$ 200,00
--- Data : 02/12/2008 ---
2 - terminal 1 - 02/12/2008 - R$ 400,00
3 - terminal 2 - 02/12/2008 - R$ 700,00
Soma = R$ 1.100,00
--- Data : 03/12/2008 ---
4 - terminal 2 - 03/12/2008 - R$ 800,00
5 - terminal 1 - 03/12/2008 - R$ 800,00
Soma = R$ 1.600,00
==== Transações Agrupadas Por Terminal ====
--- Terminal : terminal 1 ---
1 - terminal 1 - 01/12/2008 - R$ 200,00
2 - terminal 1 - 02/12/2008 - R$ 400,00
5 - terminal 1 - 03/12/2008 - R$ 800,00
Soma = R$ 1.400,00
--- Terminal : terminal 2 ---
3 - terminal 2 - 02/12/2008 - R$ 700,00
4 - terminal 2 - 03/12/2008 - R$ 800,00
Soma = R$ 1.500,00