C# 有没有办法将行批量添加到数据表中?

C# 有没有办法将行批量添加到数据表中?,c#,linq,datatable,C#,Linq,Datatable,我有很多数据需要插入到SQL表中,我想使用SqlBulkCopy。我有数以百万计的行需要添加到数据表中,而且我似乎很瓶颈,因为我发现添加行的唯一方法是使用DataTable.rows.add(DataRow)这是到目前为止我得到的代码示例: var table = new DataTable("MyTableName"); table.Columns.Add("Id"); table.Columns.Add("SomeOtherColumn"); IEnumerable<MyObject

我有很多数据需要插入到SQL表中,我想使用SqlBulkCopy。我有数以百万计的行需要添加到数据表中,而且我似乎很瓶颈,因为我发现添加行的唯一方法是使用
DataTable.rows.add(DataRow)这是到目前为止我得到的代码示例:

var table = new DataTable("MyTableName");
table.Columns.Add("Id");
table.Columns.Add("SomeOtherColumn");

IEnumerable<MyObject> myData; // this is a method parameter which has millions of values
var rows = myData.Select(data =>
{
    return data.SomeInnerEnumerable.Select(e =>
    {
        var row = table.NewRow();
        row["Id"] = e.Id;
        row["SomeOtherColumn"] = e.SomeOtherColumn;
        return row;
    });
}).SelectMany(r => r); // flattens IEnumerable<IEnumerable<DataRow>> into IEnumerable<DataRow>

Console.WriteLine("DataRows created");

foreach (var row in rows)
{
    table.Rows.Add(row);
}
var table=新数据表(“MyTableName”);
表.列.添加(“Id”);
表.Columns.Add(“SomeOtherColumn”);
IEnumerable myData;//这是一个具有数百万个值的方法参数
变量行=myData。选择(数据=>
{
返回数据。SomeInnerEnumerable.Select(e=>
{
var row=table.NewRow();
行[“Id”]=e.Id;
行[“SomeOtherColumn”]=e.SomeOtherColumn;
返回行;
});
}).选择many(r=>r);//将IEnumerable展平为IEnumerable
Console.WriteLine(“创建的数据行”);
foreach(行中的变量行)
{
table.Rows.Add(行);
}

代码很快打印出“DataRows created”
,但在循环中挂起25分钟以上。有没有更有效的方法将这么多行添加到数据表中?

对于“数百万行”的数据,似乎micro ORM可能比DataTable更好(更快)我们一直在使用Dapper,但确定使用SqlBulkCopy要快很多。我认为您应该能够使用
table.rows.AddRange(rows)而不是循环;
@Dortimer
DataRowCollection
没有
AddRange
方法,而
Add(Object[])
方法只创建一行如果您有权访问数据库架构/实例,并且可以向其中添加表值参数,您将看到巨大的改进-使用“数百万行”数据签出,似乎micro ORM可能比DataTable更好(更快)。我们一直在使用Dapper,但确定使用SqlBulkCopy比使用循环快很多。我认为您应该能够使用
table.Rows.AddRange(Rows)
@Dortimer
DataRowCollection
没有
AddRange
方法,而
Add(Object[])
方法仅创建一行如果您有权访问数据库架构/实例并可以向其添加表值参数,您将看到巨大的改进-签出