比较2个DataTable并使用LINQ将差异存储在另一个数据表中 [英] Compare 2 DataTables and store the differences in another datatable using LINQ
本文介绍了比较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屋!
查看全文