C#如何删除DataTable中指定列单元格为空的行
问题原因
你原有代码的删除逻辑没有生效,核心问题是判断条件错误:DataTable 单元格存储的数据库空值对应 C# 中的 DBNull.Value,不是常规的 C# null,所以dr["id"] == null的判断永远不会命中,自然不会执行删除操作。
正确实现方案
方案1:修改原有倒序循环的判断条件
倒序循环的思路本身是正确的,避免了正序删除导致的索引前移漏删问题,只需要调整空值判断逻辑即可:
for (int i = dtbl.Rows.Count - 1; i >= 0; i--) { DataRow dr = dtbl.Rows[i]; // 兼容多种空值场景:DBNull、C# null、空字符串/纯空格字符串(如果ID是字符串类型) if (dr["id"] == null || dr["id"] == DBNull.Value || (dr["id"] is string idStr && string.IsNullOrWhiteSpace(idStr))) { dtbl.Rows.RemoveAt(i); } }
如果ID列是数值类型,不需要判断空字符串,直接保留前两个判断条件即可。
方案2:批量筛选后删除
如果不想写循环,也可以通过DataTable.Select方法先筛选出需要删除的行再统一删除,逻辑更简洁:
// 筛选所有ID为空的行,筛选语法根据ID类型调整 string filter = "id IS NULL"; // 如果ID是字符串类型,新增空字符串判断:filter = "id IS NULL OR id = ''"; DataRow[] rowsToDelete = dtbl.Select(filter); foreach (DataRow row in rowsToDelete) { dtbl.Rows.Remove(row); }
内容的提问来源于stack exchange,提问作者Jacknife
相关产品推荐
相关产品推荐

