修改后的答案:
myDataTable.AsEnumerable().Where(a => a.ItemArray.Count(b=>b != DBNull.Value)==1).ToList().ForEach(row => dataTable.Rows.Remove(row));
我检查了,它有效。
编辑:
回应@Tim Schmelter 评论:
1. 你需要 C# 中的 myDataTable.AsEnumerable()
如果你有一个强类型的 DataTable,你就没有。我认为是这样,因为 OP 说:
无法修改数据表的初始构建,这必须是构建后发生的事情。
也许我不明白他的意思(我的英语有时让我失败)
2. 计算非空字段不正确,因为字符串可以为空,这与 DBNull.Value 不同(也根据 OP 的规范)
你可能是对的。如果 OP 说他只想要 DBNull,则应删除第二个条件(我的一个坏习惯是检查 null 以防万一)
3. ToList 创建另一个 List 是多余的
是的。如果没有 ToList(),就不能使用 ForEach()。可以使用老式的 foreach 代替,或者更好的 for 循环(因为当您尝试修改其中的集合时,foreach 不喜欢)。你仍然必须以某种方式保持你的结果。
4. DataRow.Delete 不会从表中删除所需的内容,但会将其标记为已为 DataAdapter 删除(OP 没有提到他正在使用它,这也是不需要的)。
谢谢你指出这一点。