none
Obter total de itens relacionamento 1:N RRS feed

  • 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"
    quarta-feira, 24 de fevereiro de 2016 15:06

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.

    sábado, 14 de maio de 2016 02:12
  • 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

    sábado, 14 de maio de 2016 14:23