Inquiridor
Count em uma das colunas com Linq

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
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.
- Editado Antero Marques 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!
-
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!