C# 根据一列获取两个数据表之间的差异

C# 根据一列获取两个数据表之间的差异,c#,asp.net,linq,system.data.datatable,C#,Asp.net,Linq,System.data.datatable,我有以下情况: 表A有50条记录,表B有2条记录 我需要定义一个新表,比如TableDiff,它应该包含表a中的48条记录,而表B中不存在这些记录 我的问题是表A和表B不完全相同,但我有一个字段rowId,我需要使用它来比较这两个表。单向使用可枚举。除了和可枚举。Join: var aIDs = TableA.AsEnumerable().Select(r => r.Field<int>("RowID")); var bIDs = TableB.AsEnumerable().S

我有以下情况:

表A有50条记录,表B有2条记录

我需要定义一个新表,比如TableDiff,它应该包含表a中的48条记录,而表B中不存在这些记录


我的问题是表A和表B不完全相同,但我有一个字段
rowId
,我需要使用它来比较这两个表。

单向使用
可枚举。除了
可枚举。Join

var aIDs = TableA.AsEnumerable().Select(r => r.Field<int>("RowID"));
var bIDs = TableB.AsEnumerable().Select(r => r.Field<int>("RowID"));
var diff = aIDs.Except(bIDs);
DataTable tblDiff = (from r in TableA.AsEnumerable()
                    join dId in diff on r.Field<int>("RowID") equals dId
                    select r).CopyToDataTable();
var aIDs=TableA.AsEnumerable().Select(r=>r.Field(“RowID”);
var bIDs=TableB.AsEnumerable().Select(r=>r.Field(“RowID”);
var diff=辅助设备,但投标除外;
DataTable tblDiff=(来自TableA.AsEnumerable()中的r)
在r.Field(“RowID”)上的dif中加入dId等于dId
选择r).CopyToDataTable();
以下是linq到对象的“左连接”方法:

DataTable tblDiff = (from rA in TableA.AsEnumerable()
                     join rB in TableB.AsEnumerable()
                     on rA.Field<int>("RowID") equals rB.Field<int>("RowID") into joinedRows
                     from ab in joinedRows.DefaultIfEmpty()
                     where ab == null
                     select rA).CopyToDataTable();
DataTable tblDiff=(来自TableA.AsEnumerable()中的rA)
将rB加入表B.AsEnumerable()中
在rA.Field(“RowID”)上等于rB.Field(“RowID”)上的joinedRows
来自joinedRows.DefaultIfEmpty()中的ab
其中ab==null
选择rA.CopyToDataTable();
现在再次创建datatable

    DataTable diff =  from myRow in tableA.AsEnumerable()
                      join rIDS resultantIds in myRow.Field<int>("rowId") equals rIDS
                      select myRow).CopyToDataTable()
DataTable diff=来自tableA.AsEnumerable()中的myRow
在myRow中连接rIDS ResultantId。字段(“rowId”)等于rIDS
选择myRow).CopyToDataTable()

你是什么意思?您需要一个包含数据的表??是的,一个包含来自表AUse LINQ的数据的表,并在id上连接表,您可以通过强制转换将LINQ与DataTables一起使用,然后作为Enumerable使用。您可以在使用NOT in运算符创建新表时过滤掉表B中的值/id。。
    DataTable diff =  from myRow in tableA.AsEnumerable()
                      join rIDS resultantIds in myRow.Field<int>("rowId") equals rIDS
                      select myRow).CopyToDataTable()