Get difference between two data-tables according to one column

雨燕双飞 提交于 2019-12-06 05:19:55

One way using Enumerable.Except and Enumerable.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();

Here's the linq-to-objects "left-join"-approach:

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();
    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);

now for creating datatable again

    DataTable diff =  from myRow in tableA.AsEnumerable()
                      join rIDS resultantIds in myRow.Field<int>("rowId") equals rIDS
                      select myRow).CopyToDataTable()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!