【问题标题】:Insert data from array to datatable将数据从数组插入数据表
【发布时间】:2016-03-25 00:22:30
【问题描述】:

我正在加入数据表以创建一个新的数据表,

代码:

var row = from r0w1 in dt_vi.AsEnumerable()
              join r0w2 in dt_w.AsEnumerable()
              on r0w1.Field<int>("ID") equals r0w2.Field<int>("iD")
              join r0w3 in dt_re.AsEnumerable()
              on r0w1.Field<int?>("ID") equals r0w3.Field<int?>("id")
              join r0w4 in dt_def.AsEnumerable()
              on r0w1.Field<int?>("ID") equals r0w4.Field<int?>("id") into ps
              from r0w4 in ps.DefaultIfEmpty()
              select r0w1.ItemArray.Concat(r0w2.ItemArray.Concat(r0w3.ItemArray.Concat(r0w4 != null ? r0w4.ItemArray : new object[] { }))).ToArray();


foreach (object[] values in row)
    dt.Rows.Add(values);

在上面的代码中,

foreach (object[] values in row)
    dt.Rows.Add(values);

数十万行的速度很慢。我想将row 的数据放入dt 数据表中。我试过了

dt=row.CopyToDataTable();

但它给出了错误。

如何在这里使用 CopyToDataTable() 函数来防止循环?

【问题讨论】:

  • msdn.microsoft.com/en-us/library/bb386921(v=vs.110).aspx 顺便说一句,这不会有帮助。 DataTable 是一个内存表,显然不建议在其中存储如此庞大的数据。
  • CopyToDataTable 也使用循环
  • @TimSchmelter,有没有我可以使用的最佳方法,因为我使用的上述方法效率不高!或者有没有可能我可以使用 CopyToDataTable ?
  • Copy to Datatable的可能重复
  • 您是否考虑过使用 SqlBulkCopy 将行添加到数据库表中?

标签: c# linq datatable


【解决方案1】:

如果数据表绑定到任何内容,则关闭通知。:

dt.BeginLoadData(); //  stops notifications on each addition
foreach (object[] values in row)
    dt.Rows.Add(values);
dt.EndLoadData();

并删除.ToArray(); 部分以防止再次循环每行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2021-01-12
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多