2012-03-13 2 views
5
private int EmploymentID { get; set; } 

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

Код показывает, что он проверяет, имеет ли объект DataRow ошибку в своей строке, но я хочу проверить, существует ли она когда-либо. Есть ли подход для кода, используя метод HasError DataRow?Как проверить, существует ли столбец в объекте DataRow?

Благодарим за любые ответы.

ответ

6

DataRow имеет свойство Table, ссылаясь на DataTable, из которого оно исходило. DataTable имеет свойство Columns, которое является DataColumnCollection.

Перечисление этого списка позволит вам определить, содержит ли таблица нужный столбец. Обратите внимание, что ВСЕ строки в таблице имеют одинаковые столбцы.

например:

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

Стоит отметить, что вы, скорее всего, нужно проверить равенства DBNull, если вы не 100% уверены EmploymentID никогда не может быть возвращен нуль.

Кроме того, если столбец EmploymentID набран как целое число, то вы можете избежать какой-либо необходимости для преобразования типов, используя прямой бросок:

EmploymentID = (int)row["EmploymentID"]; 

или в качестве альтернативы, использовать DataRowExtensions для более аккуратного подхода, который делает проверку все нуля для вас:

EmploymentID = row.Field<int?>("EmploymentID"); 

Если EmploymentID не обнуляемая INT, то вы можете сливаться значением как:

EmploymentID = row.Field<int?>("EmploymentID") ?? 0; 
+0

Большое спасибо Волю. Вы ответ велик. –

+0

@Hughes Нет метода расширения Any для DataColumnCollection. По крайней мере, не в .NET 4.0. – Irshad

+0

@Irshad - [Любой в пространстве имен System.Linq] (https: //msdn.microsoft.com/en-us/library/vstudio/bb534972 \ (v = vs.100 \) .aspx), подпись '' ' public static bool Любой (этот IEnumerable источник, Func <предикат TSource, bool>) '' ' –

8

Вы также можете использовать это одно заявление

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

Это работает в .NET 2.0, где нет ответа Accepted. –

Смежные вопросы