eduic 0 Denunciar post Postado Setembro 18, 2014 Eu preciso percorrer as colunas de 'atividade', 'mat_or' e 'mat_med' em um datatable que tem valores duplicados e verificar quais destas colunas têm o maior número de registros diferentes referentes a 'num_servico'. Veja um exemplo de como é a minha tabela de dados: contrato | servico | Medição | atividade| quant_at | mat_or | quant_or | mat_med | quant_med 4100003268OP | 14040001253 | 1526 | 227544 | 2 | 0252-0017-8 | 74 | 0060-0004-5 | 404 4100003268OP | 14040001253 | 1526 | 227544 | 2 | 0252-0017-8 | 74 | 0219-0028-0 | 0653 4100003268OP | 14040001253 | 1526 | 227544 | 2 | 0252-0017-8 | 74 | 0223-0010-4 | 34 4100003268OP | 14040001253 | 1526 | 227544 | 2 | 0252-0017-8 | 74 | 0252-0017-8 | 74 4100003268OP | 14040001253 | 1526 | 220515 | 68 | 0252-0017-8 | 74 | 0060-0004-5 | 404 4100003268OP | 14040001253 | 1526 | 220515 | 68 | 0252-0017-8 | 74 | 0219-0028-0 | 0653 4100003268OP | 14040001253 | 1526 | 220515 | 68 | 0252-0017-8 | 74 | 0223-0010-4 | 34 4100003268OP | 14040001253 | 1526 | 220515 | 68 | 0252-0017-8 | 74 | 0252-0017-8 | 74 4100003268OP | 14040001253 | 1526 | 225011 | 404 | 0252-0017-8 | 74 | 0060-0004-5 | 404 4100003268OP | 14040001253 | 1526 | 225011 | 404 | 0252-0017-8 | 74 | 0219-0028-0 | 0653 4100003268OP | 14040001253 | 1526 | 225011 | 404 | 0252-0017-8 | 74 | 0223-0010-4 | 34 4100003268OP | 14040001253 | 1526 | 225011 | 404 | 0252-0017-8 | 74 | 0252-0017-8 | 74 Feito isso, eu preciso adicionar os dados em um outro datatable, onde as colunas de 'contrato', 'serviço' e 'medição' é repetida de acordo com a quantidade obtida nas colunas percorridas. Veja como preciso que o DataTable fique: contrato | servico | Medição | atividade| quant_at | mat_or | quant_or | mat_med | quant_med 4100003268OP | 14040001253 | 1526 | 227544 | 2 | 0252-0017-8 | 74 | 0060-0004-5 | 404 4100003268OP | 14040001253 | 1526 | 220515 | 68 | | | 0219-0028-0 | 0653 4100003268OP | 14040001253 | 1526 | 225011 | 404 | | | 0223-0010-4 | 34 4100003268OP | 14040001253 | 1526 | | | | | 0252-0017-8 | 74 Observem que foi repetido as colunas de acordo com a coluna 'mat_met' que resultou em um maior número de registros diferentes. Com isso, peço a ajuda para fazer essa manipulação de dados. Meu datatable está sendo gerado através de uma consulta LINQ, veja a consulta: var ativ = ( from Servico in servico . AsEnumerable () join Medicao in medicao . AsEnumerable () on new { num_contrato = Servico [ "num_contrato" ], num_ordem = Servico [ "num_servico" ] } equals new { num_contrato = Medicao [ "num_contrato" ], num_ordem = Medicao [ "num_servico" ] } join MOrcado in material_orcado . AsEnumerable () on new { num_contrato = Servico [ "num_ contrato" ], num_servico = Servico [ "num_servico" ] } equals new { num_contrato = MOrcado [ "num_contrato" ], num_servico = MOrcado [ "num_servico" ] } into MaterialOrcado from MO in MaterialOrcado . DefaultIfEmpty () join MMedido in material_medido . AsEnumerable () on new { num_contrato = Servico [ "num_ contrato" ], num_servico = Servico [ "num_servico" ] } equals new { num_contrato = MMedido ["num_contrato" ], num_servico = MMedido [ "num_servico" ] } into MaterialMedido from MM in MaterialMedido . DefaultIfEmpty () group new { Servico , Medicao , MO , MM } by new { num_contrato = Servico [ "num_contrato" ], num_servico = Servico [ "num_servico" ], medicao_num = Medicao ["medicao_num"]==DBNull.Value ? null:Medicao["medicao_num"].ToString(), cod_atividade = Medicao ["atividade"]==DBNull.Value ? null:Medicao["atividade"].ToString (), material_orcado = ( MO == null ) ? "" : MO [ "material_orcado" ]. ToString (), quantidade_orcado = ( MO == null ) ? "" : MO [ "quant_material_orcado" ]. ToString (), material_medido = ( MM == null ) ? "" : MM [ "material_medido" ]. ToString (), quantidade_medido = ( MM == null ) ? "" : MM [ "quant_material_medido" ]. ToString () } into AMOM select new { num_contrato = AMOM . Key . num_contrato , num_servico = AMOM . Key . num_servico , medicao_num = AMOM . Key . medicao_num , cod_atividade = AMOM . Key . cod_atividade , atividade_quant_medida = AMOM.Sum (valor => Convert.ToInt32 (valor.Medicao["quantidade"])), material_orcado = AMOM . Key . material_orcado , quantidade_orcado = AMOM . Key . quantidade_orcado , material_medido = AMOM . Key . material_medido , quantidade_medido = AMOM . Key . quantidade_medido }). Distinct (); DataTable dtAtiv = ativ . ToDataTable (); dtAtiv . TableName = "ATIVIDADE" ; Desde já agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Setembro 19, 2014 Cara, eu acho muito mais fácil você fazer isso diretamente pelas queries do banco ao invés de fazer uma lógica no sistema... Compartilhar este post Link para o post Compartilhar em outros sites