根据一列获得两个数据表之间的差异
我有以下情况:
表A有50条记录,表B有2条记录。
我需要定义一个新表,比如TableDiff,它应包含表A中48个记录中不存在的记录
我的问题是表A和表B不完全相同,但我有两个表中存在的字段rowId
,我需要使用它进行比较。
使用Enumerable.Except
和Enumerable.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()