有没有使用Linq to SQL进行批量插入的方式?

4
我想把记录分批插入。例如,我有10,000条记录要插入,我想将它们分批插入500或1,000个一组。如何动态地实现这一点呢?也就是说,先取出前500或1,000条记录进行插入,然后取出下一批进行插入,以此类推。在我的示例中,这10,000条记录由一个通用列表组成,因此我想相应地插入或拆分此列表。
10,000的数量不是静态的,可能会少或多。只想分批插入500或1,000。

为什么你不能只使用InsertOnSubmit,当你想提交时就按提交更改? - Sarawut Positwinyu
1
@SarawutPositwinyu:你可以这样做,但效率会非常低。 - mellamokb
@mellamokb,我之前不知道这个,谢谢你分享。 - Sarawut Positwinyu
2个回答

4
使用Linq-to-Sql执行INSERT操作不会很高效,因为它总是将它们作为单独的INSERT语句运行,即使您发送批处理也是如此。您可以尝试使用类似于这个库或第三方代码来发送批处理:http://devio.wordpress.com/2011/08/05/batch-insert-using-linq-to-sql/
至于拆分列表,您可以像这样做:
var first = myList.Take(500);
var second = myList.Skip(500).Take(500);
var third = myList.Skip(1000).Take(500);
// etc.

显然,可以通过增加“Skip”量的方式在循环中完成此操作,而不是为每个部分创建单独的变量-我只是展示了这个想法。

另外,您可能会发现以下链接有帮助:


1

你能否循环遍历你的10,000个列表,并将它们放入一个次要的“插入”列表中,该列表将保存你的500或1000个项目。处理“插入”列表,然后插入下一个500或1000个项目。重复此过程直到完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接