2008-10-22 31 views

Trả lời

5

Đây là loại hiển nhiên, nhưng:

DataRowCollection.CopyTo(DataRow[] array, Int32 offset)?

Dường như không có vấn đề gì, bạn sẽ phải lặp lại bộ sưu tập (CopyTo lặp lại các phần tử DataRowTree bên trong).

Tôi cho rằng bạn có thể sử dụng phản chiếu để truy cập cây không công khai, nhưng với chi phí đáng kể.

87
DataRow[] rows = dt.Select(); 

Giả sử bạn vẫn có quyền truy cập vào dữ liệu.

+6

Câu trả lời đơn giản nhất và chính xác. Nên được đánh dấu là câu trả lời được chấp nhận. Câu hỏi này hiện có 3.500 lượt xem! –

+1

Đồng ý Javaman59, tôi đã gắn cờ câu hỏi cho người kiểm duyệt để xem xét. – si618

13

Vì lợi ích của sự hoàn chỉnh, đây là một cách khác (với LINQ), và nó giữ gìn hàng đặt hàng:

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray() 
4

Nếu bạn chưa truy cập vào các bảng chứa, bạn có thể sử dụng phần mở rộng phương pháp:

public static class DataRowCollectionExtensions 
{ 
    public static IEnumerable<DataRow> AsEnumerable(this DataRowCollection source) 
    { 
     return source.Cast<DataRow>(); 
    } 
} 

Và sau đó:

DataRow[] dataRows = dataRowCollection.AsEnumerable().ToArray(); 

Nhưng nếu bạn có quyền truy cập vào các bảng chứa, nó tốt hơn để hàng truy cập sử dụng 'phương pháp s AsEnumerable mở rộng (Description, Source):

DataRow[] dataRows = dataTable.AsEnumerable().ToArray(); 

Dù bằng cách nào bạn có thể sử dụng DataTable' DataTable s Select phương pháp với một số quá tải (Description, Source):

DataRow[] dataRows = dataTable.Select(); 
Các vấn đề liên quan