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

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

Mã cho biết rằng nó xác nhận nếu đối tượng DataRow có lỗi trên hàng của nó nhưng tôi muốn xác thực nếu nó tồn tại. Có cách tiếp cận cho mã thay vì sử dụng phương pháp HasRrror của DataRow?Làm cách nào để xác thực xem cột có tồn tại trong đối tượng DataRow không?

Cảm ơn bạn đã trả lời bất kỳ câu hỏi nào.

Trả lời

6

DataRow có thuộc tính Bảng, tham chiếu đến DataTable mà nó xuất phát từ đó. DataTable có thuộc tính Cột, là DataColumnCollection.

Việc liệt kê danh sách này sẽ cho phép bạn xác định xem bảng có chứa cột bạn muốn hay không. Lưu ý rằng tất cả các hàng trên bảng đều có các cột giống hệt nhau.

ví dụ:

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

Đó là giá trị chỉ ra rằng bạn sẽ có khả năng cần phải kiểm tra cho sự bình đẳng để DBNull, trừ khi bạn là chắc chắn 100% các EmploymentID không bao giờ có thể được trả lại null.

Ngoài ra, nếu cột EmploymentID được gõ là một số nguyên, sau đó bạn có thể tránh được bất cứ nhu cầu cho loại hình chuyển đổi, bằng cách sử dụng một dàn diễn viên trực tiếp:

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

hoặc cách khác, sử dụng DataRowExtensions cho một cách tiếp cận gọn gàng hơn nhiều, mà tất cả các kiểm tra null cho bạn:

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

Nếu EmploymentID không phải là một int nullable, sau đó bạn có thể kết thành một khối giá trị như:

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

Thank you very much Will. Bạn đang trả lời là rất tốt. –

+0

@Hughes Không có phương thức mở rộng Bất kỳ cho DataColumnCollection. Ít nhất không phải trong .NET 4.0. – Irshad

+0

@Irshad - [Bất kỳ trong không gian tên System.Linq] (https: //msdn.microsoft.com/en-us/library/vstudio/bb534972 \ (v = vs.100 \) .aspx), chữ ký '' ' public static bool Bất kỳ (nguồn IEnumerable này, Func predicate) '' ' –

8

Bạn cũng có thể sử dụng một tuyên bố này

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

Tính năng này hoạt động trong .NET 2.0, trong đó câu trả lời được chấp nhận thì không. –

Các vấn đề liên quan