Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eduic

Manipulando dados datatable

Recommended Posts

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.