Asp.net mvc 3 只需要两个数据表中不同的列值

Asp.net mvc 3 只需要两个数据表中不同的列值,asp.net-mvc-3,sql-server-2008,c#-4.0,datatable,ado.net,Asp.net Mvc 3,Sql Server 2008,C# 4.0,Datatable,Ado.net,我有两个数据表,其中我只需要在最终的数据表中使用不同的列值,如下所示 数据表(DT1) 数据表(DT2) 数据表(DT3) 如何使用数据表上的linq查询或任何其他方式来实现这一点?我尝试循环并比较两个数据表中的每一列值,但不知道如何存储在最终的数据表中 首先,我们需要连接这些表(假设ID具有PK/FK关系),然后比较这些值并将它们放在一个新表中 var unMatchedRows = from DataRow dt1Row in dt1.Rows

我有两个
数据表
,其中我只需要在最终的
数据表
中使用不同的列值,如下所示

数据表(DT1)

数据表(DT2)

数据表(DT3)


如何使用数据表上的linq查询或任何其他方式来实现这一点?我尝试循环并比较两个数据表中的每一列值,但不知道如何存储在最终的数据表中

首先,我们需要连接这些表(假设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 };
这为我们提供了一个数据行对象的集合,这些对象在工资不同的ID上连接。现在我们只需要用这些行填充一个新的DataTable

    foreach (var m in unMatchedrows)
    {
        dt3.ImportRow(m);
    }
值得注意的是,DT3需要与其他两个表具有相同的模式。这将只在新表中放置不匹配的行。有几种方法可以做到这一点,我现在不在IDE前测试它,但这应该会让你开始。希望这有帮助

ID  Salary(DT1) Salary(DT2)
1   2000             3000
2   4000             5000
    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 };
    foreach (var m in unMatchedrows)
    {
        dt3.ImportRow(m);
    }