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

5
private int EmploymentID { get; set; }

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

代码表明它验证DataRow对象的行是否存在错误,但我想验证它是否存在。除了使用DataRow的HasError方法,是否有其他方法来实现?感谢任何解答。
2个回答

8

你也可以使用这个语句

row.Table.Columns.Contains("EmploymentID")

6

DataRow有一个Table属性,引用了它所属的DataTable。 DataTable有一个Columns属性,它是一个DataColumnCollection

枚举这个列表可以让你确定表格中是否包含你想要的列。请注意,表格上的所有行都具有相同的列。

例如:

bool containsColumn = row.Table.Columns.Any(column => column.ColumnName == "EmploymentID");

值得一提的是,您可能需要检查是否等于 DBNull,除非您100%确定 EmploymentID 永远不会返回 null。
此外,如果 EmploymentID 列被定义为整数,则可以通过直接转换来避免任何类型转换的需要:
EmploymentID = (int)row["EmploymentID"]; 

或者,您可以使用DataRowExtensions作为更加简洁的方法,它会为您执行所有的空值检查:
EmploymentID =  row.Field<int?>("EmploymentID"); 

如果EmploymentID不是可空的int类型,那么您可以使用合并运算符来获取值,例如:
EmploymentID =  row.Field<int?>("EmploymentID") ?? 0;

非常感谢您,威尔。你的回答很棒。 - Jerameel Resco
@Hughes,DataColumnCollection没有任何扩展方法Any。至少在.NET 4.0中没有。 - Irshad
@Irshad - Any 在 System.Linq 命名空间中,签名为 public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) - user111013
@Hughes 我知道。我加了。但是.Any不适用于DataColumnCollection。请在VS IDE上检查一下。 - Irshad
@Irshad .Any 扩展了任何 IEnumerable。DataColumnCollection 实现了 InternalDataCollectionBase,该类实现了 IEnumerable。如果您有问题,应该记录另一个问题,而不是在此处添加更多评论。 - user111013

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接