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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:48:03