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

标签 c# asp.net linq system.data.datatable

我有以下场景:

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

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

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

最佳答案

使用 Enumerable.ExceptEnumerable.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();

这是 linq-to-objects 的“左连接”方法:

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

关于c# - 根据一列获取两个数据表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17670668/

相关文章:

c# - 直接导入到 CSS for asp.net 元素的颜色选择实用程序。

ASP.Net-在负载平衡的环境中处理 session 数据?

c# - Linq 表达式中的 Int.Parse

c# - Linq选择没有 child 的父记录

c# - 从服务器端调用 Javascript 函数

c# - 将 Linux 日期时间转换为 Windows 本地日期时间格式

c# - 如何遍历 .gif 图像中的每个像素?

asp.net - 根据条件在aspx页面中隐藏项目模板

javascript - 在 JavaScript 中显示警报消息时避免页面提交

linq - 来自 F# func 的 Expression<Func<T, bool>>