【发布时间】:2019-01-04 14:38:58
【问题描述】:
我有一个这样的缺失项目列表,我正在尝试通过从现有列表中取出小块项目(一次 2500 个项目)对我的数据库表执行批量操作:
var castedItems = missingItems.ToList();
while (castedItems.Any())
{
var subList = castedItems.Take(2500).ToList();
DBRetry.Do(() => EFBatchOperation.For(ctx,
ctx.SearchedUserItems).InsertAll(subList), TimeSpan.FromSeconds(2));
castedItems.RemoveRange(subList);
}
Missing items 是一个 concurrent bag ,而 casted items 是 list。现在我应该创建一个扩展方法,该方法将接受我取出的列表并快速删除那些插入数据库的 2500 个项目......但我不太确定该怎么做......
谁能帮帮我?
附:有问题的部分是这个:
castedItems.RemoveRange(subList);
它说 removerange 只接受两个整数作为参数( from 和 to ):/
【问题讨论】:
-
您是否尝试通过偏移量和限制?喜欢 0 和 2500 第一次?
-
类似
castedItems.Except(subList).ToList(); -
@MilindAnantwar 你的意思是像: castedItems= castedItems.Except(subList).ToList(); ?
-
@AkbarBadhusha 你能举个例子吗?
-
如果你想从集合的前面删除项目,你真的应该使用队列,而不是列表。这些操作是您可以对列表执行的一些最低效的操作。队列专门设计用于有效地完成这种类型的事情。这是假设您需要完全将项目放入一个新集合中,而不是仅仅迭代
missingItems并且从不将项目放入一个具体化的问题中(如果可行,这将是理想的)。
标签: c# linq c#-4.0 extension-methods