有效的方法来检查DataView中是否至少有一行包含空值?

时间:2010-06-06 12:12:02

标签: c# ado.net

我需要在DataView中进行测试,以检查至少有一行是否包含一个空值的单元格。在您看来,最好的方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:2)

正如SLaks所提到的,你需要遍历行和每行中的项目。您可以使用LINQ执行此操作:

bool hasNull = view.Table.Rows.OfType<DataRow>()
    .Any(r => r.ItemArray.Any(o => o == DBNull.Value));

或者您可以自己编写循环,例如:

private bool HasEmptyItem(DataView view)
{
    foreach (DataRow row in view.Table.Rows)
    {
        foreach (DataColumn col in view.Table.Columns)
        {
            if (row[col] == DBNull.Value)
                return true;
        }
    }
    return false;
}

虽然LINQ版本更紧凑,但仍然会在行和列上循环,所以请选择。

<强>更新 根据评论,这里有一个更好的样本,基于你想要做的事情。这只是循环遍历行,并检查给定列是否为空(确保将DBNull.ValueDataTable一起使用),如果是,则将其设置为false以防止出现问题。只需将IS_DEFAULT_COL更改为正确的索引。

const int IS_DEFAULT_COL = 1;
foreach (DataRow row in view.Table.Rows)
{
    if (row[IS_DEFAULT_COL] == DBNull.Value)
        row[IS_DEFAULT_COL] = false;
}

答案 1 :(得分:1)

如果不进行测量,我猜测答案是嵌套循环。