我正在尝试编写一个linq查询或另一种循环遍历数据表中列中所有行的方法。
数据列标题在高级中是已知的。因为它循环我希望能够在每个单元格中检查空值,如果找到则放入默认值,在下面的情况下它是[dob]。
下面是一个dataTable的例子,我希望能够遍历[dob]列并查找null值并将其替换为默认值01/01/1901。
[firstName], [lastname], [dob]
tester, testerSurname, null
tester2, tester2Surname, 25/04/1876
foreach (DataColumn column in table.Columns)
{
if (table.Rows.OfType<DataRow>().Any(r => r.IsNull(column)))
{
}
我已经从上面开始但是找不到获取值并将其分配给另一个值但是可以找到null。
答案 0 :(得分:2)
你不会遍历列中的每一行,你只需遍历行并检查循环中每一行的那一列:
DataTable dt;
string col = "ColumnIAmCheckingForANullValue";
string def = "My Default Value for NULL";
foreach (DataRow row in dt.Rows) {
if (string.IsNullOrEmpty(row[col].ToString())) {
row[col] = def;
}
}
答案 1 :(得分:0)
如果您要执行批量数据库更新,Linq查询不是最好的方法。你最好编写一个SQL查询来执行更新 - the COALESCE operator将是你的朋友。
UPDATE tablename
SET dob = COALESCE(dob, '1901/01/01')
答案 2 :(得分:0)
如果您使用数据表,那么您也可以遍历行中的列
foreach (DataRow dr in table.Rows)
{
foreach (DataColumn clm in table.Columns)
{
if (dr[clm] == DBNull.Value)
{
dr[clm] = GetDefaultValueForColumn[clm.ColumnName];
}
}
}
答案 3 :(得分:0)
如果检查DBNull,mikeschuld's answer的代码应该有效:
DataTable dt;
string col = "ColumnIAmCheckingForANullValue";
string anotherValue = "My Default Value for NULL";
foreach (DataRow row in dt.Rows) {
if (row[col] is DBNull) {
row[col] = anotherValue;
}
}
您可以使用查询
从数据中删除NULLSELECT ISNULL(col, '') FROM MyTable