Imagine que você tenha a seguinte estrutura para armazenamento dos dados de Orçamentos de uma Oficina Mecânica fictícia:
| Atributo | Tipo de Dados |
|---|---|
| Id | Integer |
| OficinaId | Integer |
| Cliente | String |
| Aprovado | String |
| ValorPecas | Decimal |
| ValorMaoObra | Decimal |
Imagine agora que essa estrutura esteja alimentada com da seguinte forma:
| Id | OficinaId | Cliente | Aprovado | ValorPecas | ValorMaoObra |
|---|---|---|---|---|---|
| 1 | 1 | Cliente 1 | S | 200 | 90 |
| 2 | 1 | Cliente 2 | S | 233 | 80 |
| 3 | 2 | Cliente 3 | N | 100 | 250 |
| 4 | 2 | Cliente 4 | S | 400 | 120 |
| 5 | 1 | Cliente 5 | N | 250 | 130 |
Sua necessidade seria conseguir realizar uma consulta LINQ para identificar qual o valor de Mão de Obra e qual valor de Peças, dos orçamentos aprovados e não aprovados, que uma determinada oficina tem, ou seja, você precisa de um conjunto de dados como o do exemplo abaixo:
| Aprovado | ValorPecas | ValorMaoObra |
|---|---|---|
| N | 250 | 130 |
| S | 433 | 170 |
Dado o contexto do problema e sabendo que seu conjunto de dados original é identificado pelo nome Orcamentos, então você teria que realizar a seguinte consulta LINQ para consolidar os dados:
int idOficina = 1;
var valores = (from o in Orcamentos
where o.OficinaId == idOficina
group o by new { o.Aprovado } into g
select new
{
Aprovado = g.Key.Aprovado,
ValorPecas = g.Sum(x => x.ValorPecas),
ValorMaoObra = g.Sum(y => y.ValorMaoObra)
}).ToList();
Grande abraço,
Eduardo Henrique Rizo
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Post relacionado: Consulta LINQ com Group by