比较datatable两个decimal列 值是否一样大,有dbnull.value的存在
时间: 2024-03-12 11:46:31 浏览: 93
可以使用以下代码来比较两个 `DataTable` 中的 `decimal` 列是否相等,其中考虑了 `DBNull.Value` 的情况:
```csharp
bool CompareDecimalColumns(DataTable dt1, string colName1, DataTable dt2, string colName2)
{
foreach (DataRow row1 in dt1.Rows)
{
decimal? val1 = row1.Field<decimal?>(colName1);
if (val1 == DBNull.Value)
continue;
DataRow[] rows2 = dt2.Select($"{colName2} = {val1}");
if (rows2.Length != 1)
return false;
decimal? val2 = rows2[0].Field<decimal?>(colName2);
if (val2 == DBNull.Value || val1 != val2)
return false;
}
return true;
}
```
此方法会逐行遍历 `dt1` 中的数据,对于每一行,取出 `colName1` 对应的 `decimal` 值 `val1`,如果其为 `DBNull.Value` 则跳过此行。然后通过 `dt2.Select` 方法找到 `dt2` 中 `colName2` 值等于 `val1` 的行,如果找到的行数不为 1 则说明数据不匹配,直接返回 `false`。如果找到了一行数据,则取出 `colName2` 对应的 `decimal` 值 `val2`,如果其为 `DBNull.Value` 或者 `val1` 不等于 `val2` 则说明数据不匹配,直接返回 `false`。如果遍历完成后都没有返回 `false`,则说明两个 `DataTable` 中的 `decimal` 列数据相等,返回 `true`。
阅读全文