根据一列获得两个数据表之间的差异

我有以下情况:

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

我需要定义一个新表,比如TableDiff,它应包含表A中48个记录中不存在的记录

我的问题是表A和表B不完全相同,但我有两个表中存在的字段rowId ,我需要使用它进行比较。

使用Enumerable.ExceptEnumerable.Join一种方法:

 var aIDs = TableA.AsEnumerable().Select(r => r.Field("RowID")); var bIDs = TableB.AsEnumerable().Select(r => r.Field("RowID")); var diff = aIDs.Except(bIDs); DataTable tblDiff = (from r in TableA.AsEnumerable() join dId in diff on r.Field("RowID") equals dId select r).CopyToDataTable(); 

这是linq-to-objects“left-join”-approach:

 DataTable tblDiff = (from rA in TableA.AsEnumerable() join rB in TableB.AsEnumerable() on rA.Field("RowID") equals rB.Field("RowID") into joinedRows from ab in joinedRows.DefaultIfEmpty() where ab == null select rA).CopyToDataTable(); 
  using System.Data.DataSetExtensions var tableAIds = tableA.AsEnumerable().Select(row => (int)row["rowId"]); var tableBIds = tableB.AsEnumerable().Select(row => (int)row["rowId"]); var resultantIds = tableAIds.Except(tableBIds); 

现在再次创建数据表

  DataTable diff = from myRow in tableA.AsEnumerable() join rIDS resultantIds in myRow.Field("rowId") equals rIDS select myRow).CopyToDataTable()