我遇到了一些可能是扩展方法.CopyToDataTable中的缺陷的东西。
导入(在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上投票解决该问题
干杯

最佳答案

someDataTable.AsEnumerable().Where(r => r.Field<string>("SomeField") == "SomeValue").AsDataView().ToTable();

如果现在从.AsDataView().ToTable()返回了行,则someDataTable返回一个具有与.Where()相同结构的空表

关于.net - 如何处理System.Data.DataTableExtensions.CopyToDataTable()中的缺陷,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/636765/

10-13 06:05