我有两个DataTables
,我在最终DataTable
中只需要不同的列值,如下所示
数据表(DT1)
ID Name Salary
1 ABC 2000
2 XYZ 4000
3 Suresh 6000
数据表(DT2)
ID Name Salary
1 ABC 3000
2 XYZ 5000
3 Suresh 6000
数据表(DT3)
ID Salary(DT1) Salary(DT2)
1 2000 3000
2 4000 5000
如何使用数据表中的linq查询或通过任何其他方式实现此目的?我尝试循环并比较两个数据表的每个列值,但我没有得到如何存储在最终的DataTables中。
答案 0 :(得分:0)
首先我们需要加入表(假设ID有PK / FK关系),然后比较这些值并将它们放在一个新表中。
var unMatchedRows = from DataRow dt1Row in dt1.Rows
join DataRow dt2Row in dt2.Rows
on dt1Row["id"] equals dt2Row["id"]
where Convert.ToDoubl(dt1Row["salary"]) != Convert.ToDouble(dt2Row["salary"])
select new { dt1Row, dt2Row };
这为我们提供了一个DataRow对象的集合,这些对象连接在工资不同的ID上。现在我们只需要用行填充新的DataTable。
foreach (var m in unMatchedrows)
{
dt3.ImportRow(m);
}
值得注意的是,DT3需要与其他两个表具有相同的模式。这只会在新表中放置不匹配的行。有几种方法可以做到这一点,我现在不是在IDE前面测试它,但这应该让你去。希望这可以帮助!