数据表中有三列 A,B and C. 。现在每一列都是类型 decimal. 。现在我正在做这样的事情 dt.Columns["A"].Expression="B+C"; 将 B 列的记录和 C 列的记录相加。现在如果有任何值 B or Cnull 那么 B 和 C 的加法将为 null,就像 B 的值为 3,C 的值为 null 对于第一行然后 B+C(3+null)null 这是不合适的,相加的结果应该是 3.如果我更换 0 代替 null 那么就可以了。但是,无论记录中存在空值,它都应该保留,并且不应该被替换 0.即为空值 不应该 被替换为 0 当对任何十进制值添加空值时 null 值应被视为 0.

有可能吗,我们怎样才能做到这一点?

编辑请参阅以下答案dt.Rows[0]["B"] = DBNull.Value;但我有问题,比如根据我的代码我无法分配 DBNull.Value 直接地 dt.Rows[0]["B"] = DBNull.Value; 我必须将它存储在一个类型的变量中 object 喜欢Object obj; obj=DBNull.Value 然后该值进入表。然后它给出类似的错误 null value can not be stored to the column B.

有帮助吗?

解决方案

尝试这样的事情

dt.Columns["A"].Expression = "ISNULL(B, 0) + ISNULL(C, 0)";

完整工作测试:

DataTable dt = new DataTable();
dt.Columns.Add("A", typeof(decimal));
dt.Columns.Add("B", typeof(decimal));
dt.Columns.Add("C", typeof(decimal));

dt.Rows.Add();
dt.Rows[0]["B"] = DBNull.Value;
dt.Rows[0]["C"] = 3;

dt.Columns["A"].Expression = "ISNULL(B, 0) + ISNULL(C, 0)";
Console.WriteLine(dt.Rows[0]["A"]);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top