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

DataTable如何无需foreach为HoursWorked空值设置默认值0

解决方案

你遇到的问题本质是DataTable的表达式运算中,null和任意值做比较的结果都不会被判定为true,所以HoursWorked <> ContractHours会自动忽略HoursWorked为null的行。

DataTable的Select方法原生支持ISNULL()函数,语法和SQL一致,无需额外遍历即可实现需求,你可以直接修改筛选表达式,同时加上ContractHours > 0的限定条件即可。

修改后代码

DataTable dt = (DataTable)Session["Records"];
DataTable SelectedRows = null;

if (somecondition) {
    // 直接在筛选表达式中使用ISNULL替换null为0,同时限定ContractHours大于0
    var matchedRows = dt.Select("ContractHours > 0 AND ISNULL(HoursWorked, 0) <> ContractHours");
    if (matchedRows.Length > 0)
    {
        SelectedRows = matchedRows.CopyToDataTable();
    }
}
  • 表达式中的ISNULL(HoursWorked, 0)会自动把HoursWorked为null的行的参与比较的值替换为0,完全匹配你要的效果
  • 同时优化了原有代码两次执行相同Select查询的逻辑,只查询一次后复用结果,性能更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:54:02