C# 如何正确地插入InsertAllOnSubmit(),这比循环InsertOnSubmit()好吗?

C# 如何正确地插入InsertAllOnSubmit(),这比循环InsertOnSubmit()好吗?,c#,linq-to-sql,ienumerable,C#,Linq To Sql,Ienumerable,假设我有: using (SomeDataContext db = new SomeDataContext()) { foreach(Item i in Items) { DbItem d = new DbItem; d.value = i.value; //.... etc ... db.InsertOnSubmit(d); } db.SubmitChanges();

假设我有:

using (SomeDataContext db = new SomeDataContext())
{

     foreach(Item i in Items)
     {
          DbItem d = new DbItem;
          d.value = i.value;
          //.... etc ...

          db.InsertOnSubmit(d);
     }

     db.SubmitChanges();
}
是否可能和/或更好(更糟?)执行以下操作:

使用(SomeDataContext db=new SomeDataContext())
{
IEnumerable dbItems=//?可能吗?
foreach(项目中的项目i)
{
DbItem d=新的DbItem;
d、 值=i.值;
//……等等。。。
dbItems.Add(d);/?,是否可能?
}
db.InsertAllOnSubmit(数据库项);
db.SubmitChanges();
}

您可以使用
列表

使用(SomeDataContext db=new SomeDataContext())
{
List dbItems=new List();
foreach(项目中的项目i)
{
DbItem d=新的DbItem;
d、 值=i.值;
//……等等。。。
增加(d);
}
db.InsertAllOnSubmit(数据库项);
db.SubmitChanges();
}

我不知道这是否会更有效。

不是说它是好是坏,而是说任何时候你都可以进行单个数据库调用,而不是在循环中调用数据库,你会看到性能的提高。现在
.SubmitChanges()
在幕后所做的事情超出了我们的控制。

在这里您不会看到任何性能改进,因为在调用
SubmitChanges()
之前不会发生任何事情

但即使你做了这么难看的事

foreach(Item i in Items)      
{           
    DbItem d = new DbItem;           
    d.value = i.value;           
    //.... etc ...            
    db.InsertOnSubmit(d);      
    db.SubmitChanges();
}       
我不会期望任何显著的性能下降。这是因为LINQtoSQL执行单数插入


即使使用
InsertAllOnSubmit
,您仍然会看到插入的每一行都有一个单独的SQL命令。

谢谢,这很有效。我因为说输入类型是IEnumerable而被intellisense拒绝了。
using (SomeDataContext db = new SomeDataContext())
{
     List<DbItem> dbItems = new List<DbItem>();

     foreach(Item i in Items)
     {
          DbItem d = new DbItem;
          d.value = i.value;
          //.... etc ...

          dbItems.Add(d);
     }

     db.InsertAllOnSubmit(dbItems);
     db.SubmitChanges();
}
foreach(Item i in Items)      
{           
    DbItem d = new DbItem;           
    d.value = i.value;           
    //.... etc ...            
    db.InsertOnSubmit(d);      
    db.SubmitChanges();
}