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

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

Kod wskazuje, że sprawdza, czy obiekt DataRow zawiera błąd w swoim wierszu, ale chcę sprawdzić, czy kiedykolwiek istnieje. Czy istnieje podejście do kodu raczej za pomocą metody HasError z DataRow?Jak mogę sprawdzić, czy kolumna istnieje w obiekcie DataRow?

Dziękuję za wszelkie odpowiedzi.

Odpowiedz

6

DataRow ma właściwość Tabela, która odwołuje się do DataTable, z której pochodzi. DataTable ma właściwość Columns, która jest DataColumnCollection.

Wyliczenie tej listy pozwoli określić, czy tabela zawiera żądaną kolumnę. Zauważ, że wszystkie wiersze w tabeli mają identyczne kolumny.

np

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

Warto zwrócić uwagę, że prawdopodobnie będziesz musiał sprawdzić równości do DBNull, chyba że jesteś w 100% pewien, że EmploymentID nigdy nie może zostać zwrócona wartość null.

Ponadto, jeśli kolumna EmploymentID jest wpisany jako liczba całkowita, wówczas można uniknąć żadnej potrzeby konwersji typów, za pomocą bezpośredniego Obsada:

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

lub alternatywnie używać DataRowExtensions o wiele bardziej zwięzłą podejściu który ma wszystko null sprawdzanie dla Ciebie:

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

Jeśli EmploymentID nie jest pustych int, można łączyć wartości jak:

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

Dziękuję bardzo wiele będzie. Twoja odpowiedź jest świetna. –

+0

@Hughes Brak metody rozszerzenia Any dla DataColumnCollection. Przynajmniej nie w .NET 4.0. – Irshad

+0

@Irshad - [Any jest w przestrzeni nazw System.Linq] (https: //msdn.microsoft.com/en-us/library/vstudio/bb534972 \ (v = vs.100 \) .aspx), podpis "' ' public static bool Any (this IEnumerable source, Func predicate) '' ' –

8

Można również skorzystać z tej jednej instrukcji

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

Działa to w .NET 2.0, gdzie akceptowana odpowiedź nie działa. –

Powiązane problemy