Лучший способ проверить, имеет ли в таблице данных нулевое значение
Каков наилучший способ проверить, имеет ли в таблице данных нулевое значение?
В большинстве случаев в нашем сценарии один столбец будет иметь все нулевые значения.
(Этот 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;
}
Чтобы сохранить цикл в остальной части таблицы.