none
Dúvidas RRS feed

  • Pergunta

  • Boa tarde !

    Agradeço pela ajuda.


    Como faço para incluir as linhas que tem no dt2 e não tem no dt1 ?

    Ex : Dt1 1,2,3  e outro com Dt2 1,2,3,4 

    quero inserir no Dt1 o número 4

    Como Faço para alterar linhas que se repetem

    Ex: dt1: João , Joana   dt2 : juana, zeca  Lembrando que eles tem o mesmo Id apenas com nomes diferentes quero alterar os nomes  e quero que o Datatable me mostre os Nomes diferentes.

       DataTable dt1 = new DataTable();
            
            dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"] };
            
            dt1.Columns.Add("ID");
            dt1.Columns.Add("Nome");
            dt1.Columns.Add("Apelido");
            dt1.Columns.Add("Idade");


            DataRow L1;

            L1 = dt1.NewRow();

            L1["ID"] = 1;
            L1["Nome"] = "Carolina";
            L1["Apelido"] = "Carol";
            L1["Idade"] = 25;


            dt1.Rows.Add(L1);

            DataRow L2;

            L2 = dt1.NewRow();

            L2["ID"] = 2;
            L2["Nome"] = "Luiz";
            L2["Apelido"] = "Diretor";
            L2["Idade"] = 37;


            dt1.Rows.Add(L2);

            DataRow L3;

            L3 = dt1.NewRow();

            L3["ID"] = 3;
            L3["Nome"] = "Jefferson";
            L3["Apelido"] = "Biriba";
            L3["Idade"] = 25;

            dt1.Rows.Add(L3);

            DataTable dt2 = new DataTable();

            dt2.PrimaryKey = new DataColumn[] { dt2.Columns["ID"] };

            dt2.Columns.Add("ID");
            dt2.Columns.Add("Nome");
            dt2.Columns.Add("Apelido");
            dt2.Columns.Add("Idade");


            DataRow L4;

            L4 = dt2.NewRow();

            L4["ID"] = 1;
            L4["Nome"] = "Leandro";
            L4["Apelido"] = "Gerente";
            L4["Idade"] = 37;

            dt2.Rows.Add(L4);

            DataRow L5;

            L5 = dt2.NewRow();

            L5["ID"] = 2;
            L5["Nome"] = "Luiz";
            L5["Apelido"] = "Diretor";
            L5["Idade"] = 37;

            dt2.Rows.Add(L5);

            DataRow L6;

            L6 = dt2.NewRow();

            L6["ID"] = 3;
            L6["Nome"] = "Jefferson";
            L6["Apelido"] = "Biriba";
            L6["Idade"] = 25;

            dt2.Rows.Add(L6);

            DataRow L7;

            L7 = dt2.NewRow();

            L7["ID"] = 4;
            L7["Nome"] = "Carlos";
            L7["Apelido"] = "Peixoto";
            L7["Idade"] = 42;

            dt2.Rows.Add(L7);

            //loop(dt1);
            //loop(dt2);

            //dt1.Merge(dt2);
           
            DataTable dt3 = dt1.GetChanges();

            dt1.AcceptChanges();
            dt2.AcceptChanges();

             Compare (dt1,dt2);
             Compara(dt1, dt2);

            GridView1.DataSource = dt1;
            GridView1.DataBind();

            GridView2.DataSource = dt2;
            GridView2.DataBind();

    tentei fazer dessa forma para comparar 

     var results = from table1 in dt1.AsEnumerable()
                          join table2 in dt2.AsEnumerable() on table1.Field<int>("ID") equals table2.Field<int>("ID")
                          where table1.Field<string>("Nome") != table2.Field<string>("Nome") || table1.Field<string>("Apelido") != table2.Field<string>("Apelido") || table1.Field<int>("Idade") != table2.Field<int>("Idade")
                          select table1;


    • Editado Jeff Valentim quinta-feira, 28 de fevereiro de 2013 19:12
    quinta-feira, 28 de fevereiro de 2013 19:09

Todas as Respostas

  • Cara,

    Você vai precisar trabalhar com loop dentro de loop, aconselho a criar uma função para retirar duplicidade e comparar as diferenças e caso exista inserir o que está diferente.


    Atenciosamente, Samuel dos Anjos

    quinta-feira, 28 de fevereiro de 2013 23:32
  • Da uma olhada nessa outra thread aqui:

    http://social.msdn.microsoft.com/Forums/pt-BR/504/thread/be50a923-39b9-4347-9309-6af0c6d8f712


    Atenciosamente, Samuel dos Anjos

    quinta-feira, 28 de fevereiro de 2013 23:34
  • Tente usar a opção distinct do LINQ.

    .Dintinct();

    ___

    Luciano Rieth - MCP

    • Sugerido como Resposta Luciano - Rieth sexta-feira, 1 de março de 2013 16:22
    sexta-feira, 1 de março de 2013 16:22
  • Jeff,

    Use do método LINQ "Except" e implemente um comparador com base na interface IEqualityComparer, que atenda seus requisitos, exemplo:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    
    namespace WebApplication12
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                #region Dados
                DataTable dt1 = new DataTable();
    
                dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"] };
    
                dt1.Columns.Add("ID");
                dt1.Columns.Add("Nome");
                dt1.Columns.Add("Apelido");
                dt1.Columns.Add("Idade");
    
    
                DataRow L1;
    
                L1 = dt1.NewRow();
    
                L1["ID"] = 1;
                L1["Nome"] = "Carolina";
                L1["Apelido"] = "Carol";
                L1["Idade"] = 25;
    
    
                dt1.Rows.Add(L1);
    
                DataRow L2;
    
                L2 = dt1.NewRow();
    
                L2["ID"] = 2;
                L2["Nome"] = "Luiz";
                L2["Apelido"] = "Diretor";
                L2["Idade"] = 37;
    
    
                dt1.Rows.Add(L2);
    
                DataRow L3;
    
                L3 = dt1.NewRow();
    
                L3["ID"] = 3;
                L3["Nome"] = "Jefferson";
                L3["Apelido"] = "Biriba";
                L3["Idade"] = 25;
    
                dt1.Rows.Add(L3);
    
                DataTable dt2 = new DataTable();
    
                dt2.PrimaryKey = new DataColumn[] { dt2.Columns["ID"] };
    
                dt2.Columns.Add("ID");
                dt2.Columns.Add("Nome");
                dt2.Columns.Add("Apelido");
                dt2.Columns.Add("Idade");
    
    
                DataRow L4;
    
                L4 = dt2.NewRow();
    
                L4["ID"] = 1;
                L4["Nome"] = "Leandro";
                L4["Apelido"] = "Gerente";
                L4["Idade"] = 37;
    
                dt2.Rows.Add(L4);
    
                DataRow L5;
    
                L5 = dt2.NewRow();
    
                L5["ID"] = 2;
                L5["Nome"] = "Luiz";
                L5["Apelido"] = "Diretor";
                L5["Idade"] = 37;
    
                dt2.Rows.Add(L5);
    
                DataRow L6;
    
                L6 = dt2.NewRow();
    
                L6["ID"] = 3;
                L6["Nome"] = "Jefferson";
                L6["Apelido"] = "Biriba";
                L6["Idade"] = 25;
    
                dt2.Rows.Add(L6);
    
                DataRow L7;
    
                L7 = dt2.NewRow();
    
                L7["ID"] = 4;
                L7["Nome"] = "Carlos";
                L7["Apelido"] = "Peixoto";
                L7["Idade"] = 42;
    
                dt2.Rows.Add(L7); 
                #endregion
    
                IEnumerable<DataRow> resultado = dt2.AsEnumerable().Except(dt1.AsEnumerable(), new ComparadorDataRow()).ToList();
    
                //Inserindo no dt1 os valores encontrados
                foreach (DataRow dataRow in resultado)
                    dt1.Rows.Add(dataRow);
                
                Response.Write("Foi :D");
            }
    
            public class ComparadorDataRow : IEqualityComparer<DataRow>
            {
    
                #region IEqualityComparer<DataRow> Members
    
                public bool Equals(DataRow x, DataRow y)
                {
                    return (x.Field<string>("ID") == y.Field<string>("ID"));
                }
    
                public int GetHashCode(DataRow obj)
                {
                    return obj.ToString().GetHashCode();
                }
    
                #endregion
            }
        }
    }
    
    Documentação MSDN:
    http://msdn.microsoft.com/pt-br/library/system.collections.iequalitycomparer(v=vs.90).aspx

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    sexta-feira, 1 de março de 2013 19:52