如何验证列是否存在于DataRow对象中?

Jer*_*sco 5 c# asp.net

private int EmploymentID { get; set; }

private void MapFields(DataRow row)
{
        if(row.HasError)
          EmploymentID = Convert.ToInt32(row["EmploymentID"].ToString());
}
Run Code Online (Sandbox Code Playgroud)

代码显示它验证DataRow对象是否在其行上有错误但我想验证它是否存在.有没有一种代码方法而不是使用DataRow的HasError方法?

谢谢你的回答.

Mil*_*jka 8

您也可以使用这一个声明

row.Table.Columns.Contains("EmploymentID")
Run Code Online (Sandbox Code Playgroud)


小智 6

DataRow有一个Table属性,引用它来自的DataTable.DataTable有一个Columns属性,它是一个DataColumnCollection.

枚举此列表将允许您确定表是否包含所需的列.请注意,表上的所有行都具有相同的列.

例如:

bool containsColumn = row.Table.Columns.Any(column => column.ColumnName == "EmploymentID");
Run Code Online (Sandbox Code Playgroud)

值得指出的是,您可能需要检查DBNull的相等性,除非您100%确定EmploymentID永远不会返回null.

此外,如果将EmploymentID列键入为整数,则可以通过使用直接强制转换来避免任何类型转换的需要:

EmploymentID = (int)row["EmploymentID"]; 
Run Code Online (Sandbox Code Playgroud)

或者,使用DataRowExtensions进行更简洁的方法,它会为您执行所有空值检查:

EmploymentID =  row.Field<int?>("EmploymentID"); 
Run Code Online (Sandbox Code Playgroud)

如果EmploymentID不是可以为空的int,那么您可以将值合并为:

EmploymentID =  row.Field<int?>("EmploymentID") ?? 0;
Run Code Online (Sandbox Code Playgroud)