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
相关产品推荐
相关产品推荐

