比较2个DataTable并使用LINQ将差异存储在另一个数据表中 [英] Compare 2 DataTables and store the differences in another datatable using LINQ

查看:357
本文介绍了比较2个DataTable并使用LINQ将差异存储在另一个数据表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个DataTable。如果两个数据表具有相同的值,则在两列中标记X,如果存在差异,则用X标记具有最高值的列。



I have two DataTables. if both the datatables having the same value, Then mark X in both columns, If there is difference then mark the column with highest value with X.

Datatable1

    SI.No       Name      Weight
        1       Ship       500

        2       Train      600

        3       Plane      700

        4       Car        800







Datatable2

    SI.No        Name         Weight
    
      1          Ship          500
    
      2          Train         400
    
      3          Plane         800
    
      4          Car           200





想要的结果是:



Datatable3




want the result to be:

Datatable3

SI.No Name    Weight          Datatable1        Datatable2

  1   Ship      500              X                 X

  2   Train     600              X

  3   Plane     700                                X

  4   Car       800              X



请帮我解决这个问题。提前致谢



我尝试过以下方法: -




Please help me on this. Thanks in advance

I have tried the below:-

DataTable Datatable3 = (from a in Datatable1.AsEnumerable()
                        join b in Datatable2.AsEnumerable()
                        on a["Name"].ToString() equals b["Name"].ToString()
                        a["Weight"].ToString() equals b["Weight"].ToString() into g
                        where g.Count() != 1 select a).CopyToDataTable();
dataGrid1.ItemsSource = Datatable3.DefaultView;

推荐答案

你现在可能有一个很好的解决方案:

比较两个DataTable并显示LINQ中另一个数据表的差异 [ ^ ]
You probably had a good solution now:
Compare two DataTables and Display the differences in another datatable in LINQ[^]


示例代码:

sample code:
void Main()
	{
	var dataTable1 = GetTable1();
	var dataTable2 = GetTable2();
	var resultingTable = from t1 in dataTable1.AsEnumerable()
			join t2 in dataTable2.AsEnumerable() 
				on t1.Field<int>("No") equals t2.Field<int>("No")
			select new { t1, t2 };
                     
	var newDataTable =GetTable3();
	foreach(var dr in resultingTable)
	{
	var weight1 = dr.t1.Field<int>("Weight");
	var weight2 = dr.t2.Field<int>("Weight");
	DataRow newRow = newDataTable.NewRow();
	newRow["No"] =dr.t1.Field<int>("No");
	newRow["Name"] =dr.t1.Field<string>("Name");
	newRow["Weight"] = weight1;
	newRow["Table1"] = weight1==weight2?"X": weight1>weight2?"X":"";
	newRow["Table2"] = weight2==weight1?"X": weight2>weight1?"X":"";
	
	newDataTable.Rows.Add(newRow);
} 

}

DataTable GetTable1()
{
	// Here we create a DataTable with four columns.
	DataTable table = new DataTable();
	table.Columns.Add("No", typeof(int));
	table.Columns.Add("Name", typeof(string));
	table.Columns.Add("Weight", typeof(int));
	
	// Here we add five DataRows.
	table.Rows.Add(1, "Ship", 500);
	table.Rows.Add(2, "Train", 600);
	table.Rows.Add(3, "Plane", 700);
	table.Rows.Add(4, "Car", 800);
	
	return table;
}

DataTable GetTable2()
{
	DataTable table = new DataTable();
	table.Columns.Add("No", typeof(int));
	table.Columns.Add("Name", typeof(string));
	table.Columns.Add("Weight", typeof(int));
	
	table.Rows.Add(1, "Ship", 500);
	table.Rows.Add(2, "Train", 400);
	table.Rows.Add(3, "Plane", 800);
	table.Rows.Add(4, "Car", 200);
	
	return table;
}
 DataTable GetTable3()
{
	// Here we create a DataTable with four columns.
	DataTable table = new DataTable();
	table.Columns.Add("No", typeof(int));
	table.Columns.Add("Name", typeof(string));
	table.Columns.Add("Weight", typeof(int));
	table.Columns.Add("Table1", typeof(string));
	table.Columns.Add("Table2", typeof(string));
	return table;
}


这篇关于比较2个DataTable并使用LINQ将差异存储在另一个数据表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆