【问题标题】:More Efficient way to Copy DataRows into another DataTable将 DataRows 复制到另一个 DataTable 中的更有效方法
【发布时间】:2016-02-05 22:31:12
【问题描述】:

这个问题是关于为一个简单的问题找到一种更有效的方法。我有两个具有相同结构的 DataTables(即,列具有相同的名称和相同的序数)。让他们调用 DataTable ADataTable B。假设两者都有 100 行。现在我想将 DataTable B 的所有行复制到 DataTable A 而不从 DataTable A 中删除行。所以最后 DataTable A 有 200 行。我做了如下所示。

for (int i = 0; i < B.Rows.Count - 1;i++ )
    {
        DataRow dr = B.Rows[i];
        A.Rows.Add(dr);
    }

问题是我不想循环。有没有直接复制它的方法,没有循环。一次全部 100 行。是否有指定要复制的行集的函数。

【问题讨论】:

标签: c# .net datatable


【解决方案1】:

据我所知,除了遍历所有行之外,没有其他方法可以将多行从一个 Datatable 复制到另一个 Datatable。其实在 MSDN 上有一篇文章告诉你如何在 Datatables 之间复制行并使用迭代循环。

https://support.microsoft.com/en-gb/kb/305346

【讨论】:

    【解决方案2】:

    您的简单方法存在一些问题,因为它不处理主键违规。尝试 BeginLoadData、LoadDataRow 和 EndLoadData。这应该更有效率。 BeginLoadData 和 EndLoadData 只调用一次。

    【讨论】:

    • 您能否详细说明一下,您的建议答案。我们为什么要考虑主键。我没有使用数据库。
    • 是否使用数据库并不重要。 Dataset 是一个内存数据库,包含表 (Datatable) 和行 (DataRow)。最佳做法是将一列或多列设为主键,DataColumn 中有此属性。没有这个,您将失去通过键轻松定位行的能力,您只能遍历。请阅读有关数据集的内容,例如msdn.microsoft.com/en-us/library/8bw9ksd6.aspx
    • 至于效率:如果 Datatable 绑定到 UI 控件,这种方法会快很多,因为当您在没有 BeginLoadData 的情况下复制表时,每一行都会更新 UI,使用 BeginLoadData、EndLoadData 这种情况只会发生一次.如果没有 UI,我猜性能几乎相同。
    【解决方案3】:

    如果您只需要一个新的独立 DataTable 实例来处理而不需要将行附加到现有的 DataTable,那么 DataView.ToTable() 方法非常方便。

    https://msdn.microsoft.com/en-us/library/a8ycds2f(v=vs.110).aspx

    它创建一个具有相同架构和内容的单独副本。

    DataTable objTableB = objTableA.DefaultView.ToTable();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多