Лучший способ проверить, имеет ли в таблице данных нулевое значение

Каков наилучший способ проверить, имеет ли в таблице данных нулевое значение?

В большинстве случаев в нашем сценарии один столбец будет иметь все нулевые значения.

(Этот datatable возвращается сторонним приложением - мы пытаемся поставить valiadation до того, как наше приложение обработает таблицу данных)

Ответ 1

Попробуйте сравнить значение столбца со значением DBNull.Value для фильтрации и управления нулевыми значениями любым способом, который вы считаете нужным.

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}

Дополнительная информация о классе DBNull


Если вы хотите проверить, существует ли нулевое значение в таблице, вы можете использовать этот метод:

public static bool HasNull(this DataTable table)
{
    foreach (DataColumn column in table.Columns)
    {
        if (table.Rows.OfType<DataRow>().Any(r => r.IsNull(column)))
            return true;
    }

    return false;
}

который позволит вам написать это:

table.HasNull();

Ответ 2

foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}

Ответ 3

Вы можете цитировать строки и столбцы, проверяя наличие нулей, отслеживая, есть ли нуль с bool, а затем проверяйте его после прокрутки по таблице и обрабатывайте его.

//your DataTable, replace with table get code
DataTable table = new DataTable();
bool tableHasNull = false;

foreach (DataRow row in table.Rows)
{
    foreach (DataColumn col in table.Columns)
    {
        //test for null here
        if (row[col] == DBNull.Value)
        {
            tableHasNull = true;
        }
    }
}

if (tableHasNull)
{
    //handle null in table
}

Вы также можете выйти из цикла foreach с инструкцией break, например.

//test for null here
if (row[col] == DBNull.Value)
{
    tableHasNull = true;
    break;
}

Чтобы сохранить цикл в остальной части таблицы.