none
Count em uma das colunas com Linq RRS feed

  • Discussão Geral

  • Bom dia a todos!

    Estou realizando uma select e minha fonte de dados é uma planilha Excel, até ai tudo bem, consigo extrair a maioria das informações necessárias! 

    O meu problema é que em uma das colunas me trás vários itens e soh queria que retornasse a quantidade de produtos!

    Segue o resultado da minha consulta!

    SANTOS   BSE0162514   TEREOS COM SA   CAP CORTES   0634KE   NULL   20FF   TEREOS COM SA   CNB   124   1
    SANTOS BSE0162514 TEREOS COM SA CAP CORTES 0634KE NULL 20ST TEREOS COM SA CNB 124 1
    SANTOS BSE0162514 TEREOS COM SA CAP CORTES 0634KE NULL 40HC TEREOS COM SA CNB 124 1

    Gostaria que me retornasse na coluna onde me trás os seguintes resultados 20FF, 20ST, 40HC a informação 3!

    Assim

    SANTOS  BSE0162514  TEREOS COM SA  CAP CORTES  0634KE  NULL  3  TEREOS COM SA  CNB  124  1

    Eu sei que é necessário usar o Count() mais como utilizaria com linq?

    Segue o meu método que estou utilizando

    public void CarregarBookingCMA() { OleDbConnection conexao = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\marciosilva\Desktop\Armadores\Booking55.xls;Extended Properties='Excel 12.0 Xml;HDR=YES';"); OleDbDataAdapter adapter = new OleDbDataAdapter("select distinct [BKH - Loading Port (POL) Name],[BKH - Booking Ref], [PARD - Full Name (Decidy)],[BKH - Vessel Name],[BKH - Voyage Ref],[BKD - Cargo Temperature],[BKD - Package],[BKH - Booking Party Name],'CNB' as [ARMADOR], '124' AS [ARM_ID], '1' AS [CARG_ID] from [Page1_1$] where [BKH - Loading Port (POL) Name] = 'SANTOS' AND ([BKH - Booking Ref] = 'BSE0162514')", conexao); DataSet ds = new DataSet(); List<IntegracaoInfo> listaSaida = new List<IntegracaoInfo>(); try { conexao.Open(); adapter.Fill(ds); foreach (DataRow linha in ds.Tables[0].Rows) { IntegracaoInfo integracao = new IntegracaoInfo(); integracao.PORTO_CARREG = Convert.ToString(linha["BKH - Loading Port (POL) Name"]); integracao.BKG_NUMERO = Convert.ToString(linha["BKH - Booking Ref"]); integracao.ARMADOR = Convert.ToString(linha["ARMADOR"]); integracao.ARM_ID = Convert.ToString(linha["ARM_ID"]); integracao.CLIENTE = Convert.ToString(linha["PARD - Full Name (Decidy)"]); integracao.NAVIO = Convert.ToString(linha["BKH - Vessel Name"]); integracao.VIAGEM = Convert.ToString(linha["BKH - Voyage Ref"]); integracao.PORTO_DEST = Convert.ToString(linha["BKH - Loading Port (POL) Name"]).Split(',').FirstOrDefault(); integracao.PORTO_DEST_PAIS = Convert.ToString(linha["BKH - Loading Port (POL) Name"]).Split(',').LastOrDefault(); integracao.CARG_ID = Convert.ToString(linha["CARG_ID"]); integracao.BKG_TEMP = Convert.ToString(linha["BKD - Package"]); integracao.BKG_EXPORTADOR = Convert.ToString(linha["BKH - Booking Party Name"]);

    IntegracaoBLL obj = new IntegracaoBLL(); listaSaida.Add(integracao); var teste = (from i in listaSaida select i); GridView2.DataSource = teste; GridView2.DataBind(); } } catch (Exception ex) { Console.WriteLine("Erro ao acessar os dados: " + ex.Message); } finally { conexao.Close(); } }

    O campo que é para realizar o Count é integracao.BKG_TEMP!

    Desde já muito obrigado a todos!

     

    • Editado Marcio Camargo quarta-feira, 13 de abril de 2016 17:37 Erro de digitação
    • Tipo Alterado Marcos SJ quarta-feira, 13 de abril de 2016 19:50 How to
    quarta-feira, 13 de abril de 2016 17:35

Todas as Respostas

  • Basta fazer um Group By:

    SELECT [BKH - Loading Port (POL) Name]
    	,[BKH - Booking Ref]
    	,[PARD - Full Name (Decidy)]
    	,[BKH - Vessel Name]
    	,[BKH - Voyage Ref]
    	,[BKD - Cargo Temperature]
    	,COUNT([BKD - Package])
    	,[BKH - Booking Party Name]
    	,'CNB' AS [ARMADOR]
    	,'124' AS [ARM_ID]
    	,'1' AS [CARG_ID]
    FROM [Page1_1$]
    WHERE [BKH - Loading Port (POL) Name] = 'SANTOS'
    	AND ([BKH - Booking Ref] = 'BSE0162514')
    GROUP BY
    	 [BKH - Loading Port (POL) Name]
    	,[BKH - Booking Ref]
    	,[PARD - Full Name (Decidy)]
    	,[BKH - Vessel Name]
    	,[BKH - Voyage Ref]
    	,[BKD - Cargo Temperature]
    	,[BKH - Booking Party Name]

    Att,


    Antero Marques

    ________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    quarta-feira, 13 de abril de 2016 17:51
  • Boa tarde Antero,

    Já havia tentado do mesmo jeito que você sugeriu, o problema é que o resultado é 44 referentes as 44 linhas da base de dados referentes a condição

    WHERE        ([BKH - Loading Port (POL) Name] = 'SANTOS') AND ([BKH - Booking Ref] = 'BSE0162514')

    E também vou remover a condição

    AND ([BKH - Booking Ref] = 'BSE0162514')

    no caso tenho que trazer Count() para cada grupo do [BKH - Booking Ref]  que são varios

    no caso como no exemplo que enviei anteriormente

    SANTOS  BSE0162514  TEREOS COM SA  CAP CORTES  0634KE  NULL  3  TEREOS COM SA  CNB  124  1

    Mais muito obrigado pelo retorno rápido!

    quarta-feira, 13 de abril de 2016 18:24
  • Bom dia a Todos,

    Depois de quebrar a cabeça, segue a minha solução para o meu problema!

     var  categoryCounts =
                                       from i in listaSaida
                                       group i by i.BKG_NUMERO into g
                                       select new { Category = g.Key, ProductCount = g.Count() };
    
                        var teste = from i in listaSaida
                                     join c in categoryCounts on i.BKG_NUMERO equals c.Category
    
                                     select new {i.PORTO_CARREG, i.BKG_NUMERO, i.ARMADOR, i.ARM_ID, i.CLIENTE, i.NAVIO, i.VIAGEM, i.PORTO_DEST, i.PORTO_DEST_PAIS, i.CARG_ID, BKG_TEMP = c.ProductCount, i.BKG_EXPORTADOR, i.BKG_GWT, i.TIPOCNTR };

    Segue o material que usei para consulta!

    https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

    Desde já muito obrigado a todos!

    segunda-feira, 18 de abril de 2016 12:19