You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual C#:用Linq筛选DataTable中存在/不存在于另一表的记录

当然可以!完全不用写繁琐的for循环,用LINQ就能干净利落地搞定这两个筛选需求。结合你给出的示例数据,我来一步步给你演示:


示例数据

DataTable A

IDValue
27
23
35
56
72
75
74

DataTable B

IDValue
13
19
24
46
42
74
93

一、筛选A中ID存在于B的记录

核心思路是先把B里所有不重复的ID提取出来(减少重复判断,提升效率),然后用Contains方法筛选A中ID在这个集合里的行。

代码实现:

// 从DataTable B中提取所有唯一ID
var bUniqueIds = dtB.AsEnumerable()
                    .Select(row => row.Field<int>("ID"))
                    .Distinct();

// 筛选A中ID存在于B的记录,转成新的DataTable
var aRecordsInB = dtA.AsEnumerable()
                     .Where(row => bUniqueIds.Contains(row.Field<int>("ID")))
                     .CopyToDataTable();

筛选结果:

IDValue
27
23
72
75
74

二、筛选A中ID不存在于B的记录

逻辑几乎一致,只需要在Contains前加个取反运算符!即可。

代码实现:

// 复用之前提取的bUniqueIds集合
var aRecordsNotInB = dtA.AsEnumerable()
                        .Where(row => !bUniqueIds.Contains(row.Field<int>("ID")))
                        .CopyToDataTable();

筛选结果:

IDValue
35
56

小提醒:如果筛选后的结果为空,直接调用CopyToDataTable()会抛出异常。可以先判断是否有结果再处理:

var filteredRows = dtA.AsEnumerable().Where(...);
var resultTable = filteredRows.Any() ? filteredRows.CopyToDataTable() : dtA.Clone();

内容的提问来源于stack exchange,提问作者Pikachu620

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:15:45