我遇到了一些可能是 Extension 方法中的缺陷.CopyToDataTable
。
此方法由 Importing(在 VB.NET 中)使用System.Data.DataTableExtensions
,然后针对 IEnumerable 调用该方法。如果您想使用 LINQ 过滤数据表,然后在最后恢复数据表,您可以这样做。
IE:
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
在上面的示例中,“WHERE”过滤可能不返回任何结果。如果发生这种情况,CopyToDataTable 会抛出异常,因为没有 DataRows。
为什么?
正确的行为应该是返回 Rows.Count = 0 的 DataTable。
谁能想到一个干净的解决方法,这样调用 CopyToDataTable 的人就不必知道这个问题?
System.Data.DataTableExtensions 是一个静态类,因此我无法覆盖该行为。有任何想法吗?我错过了什么吗?
更新:
我已将此作为问题提交给Connect。我仍然想要一些建议,但如果你同意我的观点,你可以通过上面的链接在 Connect 上投票赞成这个问题
干杯