仅需要来自两个DataTable的不同列值

时间:2013-04-17 18:33:06

标签: asp.net-mvc-3 sql-server-2008 c#-4.0 datatable ado.net

我有两个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中。

1 个答案:

答案 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前面测试它,但这应该让你去。希望这可以帮助!