Лучший способ проверить, имеет ли таблица данных нулевое значение - PullRequest
79 голосов
/ 05 января 2011

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

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

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

Ответы [ 6 ]

150 голосов
/ 05 января 2011

Попробуйте сравнить значение столбца со значением 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();
23 голосов
/ 05 января 2011
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}
10 голосов
/ 05 января 2011

Вы можете циклически бросать строки и столбцы, проверять наличие нулей, отслеживать наличие нулевого значения с помощью 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;
}

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

1 голос
/ 22 мая 2018

Я сделаю как ....

(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
0 голосов
/ 22 февраля 2019

Вы можете установить нулевое / пустое / пробел значение Etc, используя LinQ Использовать следующий запрос

   var BlankValueRows = (from dr1 in Dt.AsEnumerable()
                                  where dr1["Columnname"].ToString() == ""
                                  || dr1["Columnname"].ToString() == ""
                                   || dr1["Columnname"].ToString() == ""
                                  select Columnname);

Здесь Замените Имя столбца на имя столбца таблицы и "" ваш элемент поиска в приведенном выше коде мы ищем нулевое значение.

0 голосов
/ 06 сентября 2018
DataTable dt = new DataTable();
        foreach (DataRow dr in dt.Rows)
        {
            if (dr["Column_Name"] == DBNull.Value)
            {
                //Do something
            }
            else
            {
                //Do something
            }
        }
...