none
Agrupamento com Linq C# RRS feed

  • Pergunta

  • Bom dia pessoal, estou com duvidas em relação ao funcionamento do Linq C# ainda mais que confundo muito com a estrutura SQL

    Gostaria de saber como seleciono colunas especificas com linq igual no sql e se é possivel realizar um agrupamento seguido do outro

    no caso preciso exibir resultados agrupados por ano, somente do produto 2, e exibir a quantidade vendida que é o que nao estou conseguindo o detalhe e que a quantidade ja esta sumarizada pela consulta SQL 

    SELECT ID_REGIAO,NR_ANO_MES,ID_GRUPO_PRODUTO,SUM(VR_VENDA),SUM(NR_COBERTURA_CLIENTES),SUM(QTD) FROM BI_FAT_VENDA GROUP BY ID_REGIAO,NR_ANO_MES,ID_GRUPO_PRODUTO;

    gerando essa lista ja agrupada agora precisaria ignorar o filtro de regiao e agrupar novamente com linq so que somente por ano, e filtrar pelo produto 2 exibindo a quantidade vendida

    so consegui chegar a isso, preciso exibir a quantidade vendida como faço isto?

    var lista = from venda in my_list where venda.ID_GRUPO_PRODUTO ==2 group venda by venda.NR_ANO_MES  into grupo select grupo

    Agradeço desde ja a ajuda


    Se voce nao tem Dom, Tenha Vontade.

    sexta-feira, 19 de outubro de 2012 14:17

Respostas

Todas as Respostas

  • Olá Marcos,

    Veja se isso ajuda:

    var query = from v in BI_FAT_VENDA
                group v by new { v.ID_REGIAO,v.NR_ANO_MES,v.ID_GRUPO_PRODUTO } into myGroupTemp
                select new 
    		{ 
    			myGroupTemp.Key.ID_REGIAO, 
    			myGroupTemp.Key.NR_ANO_MES, 
    			myGroupTemp.Key.ID_GRUPO_PRODUTO, 
    			SumVenda = myGroupTemp.Sum(s => s.VR_VENDA) 
    			SumCobertura = myGroupTemp.Sum(s => s.NR_COBERTURA_CLIENTES) 
    			SumQtde = myGroupTemp.Sum(s => s.QTD) 
    		};

    A segunda query deve ficar parecida com o código abaixo:

    var query = from v in BI_FAT_VENDA
    	    where v.ID_GRUPO_PRODUTO == 2 
                group v by new { v.NR_ANO_MES,v.ID_GRUPO_PRODUTO } into myGroupTemp
                select new 
    		{  
    			myGroupTemp.Key.NR_ANO_MES, 
    			myGroupTemp.Key.ID_GRUPO_PRODUTO, 
    			SumQtde = myGroupTemp.Sum(s => s.QTD) 
    		};

    Talvez o nomes dos campos mude um pouco, mas isso vai depender do seu contexto.

    Outro ponto, estou fazendo as consultas sobre BI_FAT_VENDA, não sei se vc irá acessar uma lista ou direto no banco, mas é simples de mudar, basta trocar a origem dos dados.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Sugerido como Resposta Vitor Mendes sábado, 20 de outubro de 2012 00:17
    sexta-feira, 19 de outubro de 2012 20:26
    Moderador
  • Ola boa tarde,

    Então , estou pegando de uma lista de objetos da persistencia 

    List<Persistencia.ResumoDoBrasil> my_list = objeto_neg.retorna_vendas();

    Consegui exibir as demais colunas, ela esta exatamente como na consulta sql ja agrupada, apartir desses dados ja agrupados em uma lista faria outro agrupamento com linq, so que nao sei porque o codigo que me exemplificou nao esta funcionando nao esta agrupando os dados novamente desta lista de objetos


    Se voce nao tem Dom, Tenha Vontade.

    segunda-feira, 22 de outubro de 2012 19:55
  • Olá Marcus,

    Preciso dar uma olhada nos dados de sua tabela para conseguir opinar sobre o resultado da query...

    Vc tem algum script para construção dessas tabelas e inclusão de dados nas mesmas?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Marcus X terça-feira, 23 de outubro de 2012 17:03
    segunda-feira, 22 de outubro de 2012 23:39
    Moderador
  • Olá fernando,

    Deu certo, na verdade foi confusão minha é exatamente isto que precisava muito obrigado pela ajuda!

    Abs!


    Se voce nao tem Dom, Tenha Vontade.

    terça-feira, 23 de outubro de 2012 17:02