Hey guys, vì vậy tôi đã đi qua một cái gì đó mà có lẽ là một lỗ hổng trong phương pháp mở rộng .CopyToDataTable.Làm thế nào để đối phó với một lỗ hổng trong System.Data.DataTableExtensions.CopyToDataTable()
Phương pháp này được sử dụng bằng cách nhập (trong VB.NET) System.Data.DataTableExtensions và sau đó gọi phương thức chống lại một IEnumerable. Bạn sẽ làm điều này nếu bạn muốn lọc một Datatable bằng cách sử dụng LINQ, và sau đó khôi phục DataTable ở cuối.
tức là:
Imports System.Data.DataRowExtensions
Imports System.Data.DataTableExtensions
Public Class SomeClass
Private Shared Function GetData() As DataTable
Dim Data As DataTable
Data = LegacyADO.NETDBCall
Data = Data.AsEnumerable.Where(Function(dr) dr.Field(Of Integer)("SomeField") = 5).CopyToDataTable()
Return Data
End Function
End Class
Trong ví dụ trên, "WHERE" lọc có thể không có kết quả. Nếu điều này xảy ra CopyToDataTable ném một ngoại lệ vì không có DataRows.
Tại sao?
Các hành vi chính xác nên được để trả về một DataTable với Rows.Count = 0.
bất cứ ai có thể nghĩ ra một cách giải quyết sạch vào đó, theo cách như vậy mà bất cứ ai gọi CopyToDataTable không nhất thiết phải nhận thức được vấn đề này?
System.Data.DataTableExtensions là lớp tĩnh nên tôi không thể ghi đè hành vi .... bất kỳ ý tưởng nào? Tôi đã bỏ lỡ một cái gì đó?
cổ vũ
UPDATE:
Tôi đã đệ trình này như là một vấn đề cần Connect. Tôi vẫn muốn một số gợi ý, nhưng nếu bạn đồng ý với tôi, bạn có thể bỏ phiếu lên vấn đề này tại Kết nối qua liên kết ở trên
cổ vũ
Tôi nghĩ rằng điều này có thể được cải thiện một chút để sử dụng '! Source.Any()' thay vì 'Source.Count() == 0'. 'Bất kỳ' sẽ dừng lại ngay sau khi nó tìm thấy bất kỳ kết quả nào. – row1
Nhiều hơn một chút –
Đây không phải là lỗi; hành vi là rất nhiều bởi thiết kế và cố ý.Một trong những điều đầu tiên 'CopyToDataTable' thực hiện là lấy một hàng, tìm bảng bên dưới và sao chép các cột vào' DataTable' mới của bạn. Workaround của bạn tạo ra một 'DataTable' trống rỗng không có cột. Bạn có thể lấy đi với điều này trong một DataSource (nó sẽ không nhìn vào bảng nếu nó không có hàng), nhưng trong các tình huống khác bạn không thể. – Brian