0

我正在尝试编写一个 linq 查询或其他方式来循环遍历数据表中一列中的所有行。

数据列标题在高级中是已知的。当它循环时,我希望能够检查每个单元格中的空值,如果找到,则放入默认值,在下面的情况下是 [dob]。

下面是一个数据表的示例,我希望能够遍历 [dob] 列并查找空值并将其替换为默认值,例如 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。

4

4 回答 4

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;
    }
}
于 2012-06-21T16:15:26.213 回答
0

如果您希望执行批量数据库更新,Linq 查询并不是最好的方法。您最好编写一个 SQL 查询来执行更新 - COALESCE 运算符将成为您的朋友。

UPDATE tablename
SET dob = COALESCE(dob, '1901/01/01')
于 2012-06-21T16:17:33.820 回答
0

如果您使用数据表,那么您还可以循环遍历一行中的列

 foreach (DataRow dr in table.Rows)
        {

            foreach (DataColumn clm in table.Columns)
            {
                if (dr[clm] == DBNull.Value)
                {
                    dr[clm] = GetDefaultValueForColumn[clm.ColumnName];
                }
            }
        }
于 2012-06-21T16:22:56.463 回答
0

如果检查 DBNull,来自mikeschuld 答案的代码应该可以工作:

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;
    }
}

您可以使用查询从数据中删除 NULL

SELECT ISNULL(col, '') FROM MyTable
于 2012-06-21T16:29:12.350 回答