Inquiridor
Obter total de itens relacionamento 1:N

Discussão Geral
-
Olá pessoal,
Possuo duas tabelas Produto e Itens - estas tabelas possue relacionamento Pai / Filho respectivamente. Gostaria de saber como faço para obter o total de itens da tabela Itens sabendo que cada cliente pode possuir mais de um Pedido e que cada pedido é composto por diversos itens? Se possível, gostaria de saber também como faço para obter o valor total dos itens.
Estou utilizando EntityFramework com Code First. A query já possui o Include mas até o momento ao acrescentar o GroupBy + Count o resultado retornado é o total de Pedidos (tabela pai).
Obs.: Se eu utilizar a tabela Itens como tabela principal na query sei que conseguiria esta informação. Acontece que devo utilizar a Tabela de Pedidos como tabela principal na query , pois a mesma possui relacionamento com outras tabelas e as mesmas são importantes para a regra de negócio atual.
Desde já agradeço pela força.
- Tipo Alterado Marcos SJ quarta-feira, 24 de fevereiro de 2016 18:24 Solicitação de código / "How to"
Todas as Respostas
-
Olá Pedro,
Você pode fazer utilizando linq puro sobre a lista de pedidos agrupando por numero de pedido e somando os itens da seguinte forma:
var pedidosGroup = from ped in pedidos group ped by ped.NroPedido into pedGroup select new { NroPedido = pedGroup.First().NroPedido, ValorTotal = pedGroup.Sum(ped => ped.Itens.Sum(item => item.Quantidade * item.ValorUnitario)) };
Segue o código completo caso necessite de mais detalhes:
class Program { static void Main(string[] args) { List<Pedido> pedidos = new List<Pedido>(); pedidos.Add( new Pedido(){ NroPedido = 1, Itens = new List<Item>(){ new Item() { Quantidade = 2, ValorUnitario = 5.25f } , new Item() { Quantidade = 1, ValorUnitario = 2.25f } } }); pedidos.Add( new Pedido(){ NroPedido = 2, Itens = new List<Item>(){ new Item() { Quantidade = 2, ValorUnitario = 3.15f } , new Item() { Quantidade = 1, ValorUnitario = 2.25f } } }); var pedidosGroup = from ped in pedidos group ped by ped.NroPedido into pedGroup select new { NroPedido = pedGroup.First().NroPedido, ValorTotal = pedGroup.Sum(ped => ped.Itens.Sum(item => item.Quantidade * item.ValorUnitario)) }; foreach (var item in pedidosGroup) { Console.WriteLine("Pedido {0} Valor Total {1} ",item.NroPedido, item.ValorTotal); } Console.ReadKey(); } } class Pedido { public int NroPedido; public List<Item> Itens; } class Produto { } class Item { public Produto Produto; public int Quantidade; public float ValorUnitario; }
Espero ter ajudado
Abs.
-
Olá pessoal,
Possuo duas tabelas Produto e Itens - estas tabelas possue relacionamento Pai / Filho respectivamente. Gostaria de saber como faço para obter o total de itens da tabela Itens sabendo que cada cliente pode possuir mais de um Pedido e que cada pedido é composto por diversos itens? Se possível, gostaria de saber também como faço para obter o valor total dos itens.
Estou utilizando EntityFramework com Code First. A query já possui o Include mas até o momento ao acrescentar o GroupBy + Count o resultado retornado é o total de Pedidos (tabela pai).
Obs.: Se eu utilizar a tabela Itens como tabela principal na query sei que conseguiria esta informação. Acontece que devo utilizar a Tabela de Pedidos como tabela principal na query , pois a mesma possui relacionamento com outras tabelas e as mesmas são importantes para a regra de negócio atual.
Desde já agradeço pela força.
A sua pergunta é muito boa, mas, está confusa!
Primeiro você poderia disponibilizar os dois model!
Depois perguntar, se é um total por pedidos, se é um total geral ou então fazer a pergunta segmentada para que possamos entender!
Outra coisa, você consegue "SIM" trazer os dados das outras tabelas pela Entidade Items do Pedido se todas tiverem relação e isso é muito simples, o difícil é saber mesmo o que realmente você precisa! pela quantidade de informação da pergunta! Pelo visto vai funcionar porque você disse que pedido relaciona com itens do pedido então do itens do pedido eu chego ao pedido e do pedido eu chego as outras relações! entendeu?
Fulvio C