我正在使用一个非常大的数据表,它有5000行和8000列。在数据表中有一些空单元格。我使用以下代码用0填充空单元格。但由于数据表非常大,速度真的很慢!我只是想问一下是否有其他方法而不是for循环。
for (int i = 0; i < SP_dt.Rows.Count; i++)
{
for (int j = 0; j < SP_dt.Columns.Count; j++)
{
if (SP_dt.Rows[i][j].ToString() == "")
SP_dt.Rows[i][j] = 0;
Console.WriteLine("{0} {1}",i,j);
}
}
答案 0 :(得分:1)
在SQL中比在C#代码中更好地解决问题,为查询创建存储过程,然后使用COALESCE
系统函数。
COALESCE
函数基本上会从左到右检查其参数中给出的一组元素,直到它发现它不是NULL
并返回它。这样,您可以将默认值0
放在COALESCE
的最后一个元素中:
create procedure spMyProc
as
begin
select
COALESCE(colName1HavingNumericDataTypeToBeChecked, 0),
COALESCE(colName2HavingNumericDataTypeToBeChecked, 0),
COALESCE(colNameNHavingNumericDataTypeToBeChecked, 0)
from tableName
end
然后在您的C#代码中,您只需call that stored procedure。
如果您的colName1HavingNumericDataTypeToBeChecked
不是NULL
,则会返回colName1HavingNumericDataTypeToBeChecked
中的值。如果是NULL
,那么它会查找下一个项目并找到0
(不是NULL
),它将返回0
。