Inquiridor
Dúvidas

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
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
- Sugerido como Resposta Samuel Rodrigues 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
- Sugerido como Resposta Samuel Rodrigues 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
-
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).aspxVitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Sugerido como Resposta Samuel Rodrigues dos Anjos domingo, 10 de março de 2013 01:59