LINQ / Objects如何删除项目并将其添加到另一个列表

时间:2013-03-20 08:53:32

标签: c# linq

我正在使用Linq和一些问题。

实际工作负载在后台作业中处理。

不应将实际工作量用于进一步的任务。更重要的是,处理实际工作项的方法可以非常快速地完成并产生结果,因此将完整的工作量放在大量的工作项中。

一次,我只处理列表的前n个对象,因此我接受n个对象,然后从完整的工作项列表中删除它们。

Roughly:

int amount = 100;
List<WorkItem> actualWorkload = null;

lock(lockWorkload){ // complete Workload is filled in other thread
    if (actualWorkload.Count > amount)
    {
        actualWorkload.AddRange(completeWorkload.Take(amount));
    }
    else
    {
        actualWorkload.AddRange(completeWorkload);
    }
    completeWorkload.RemoveAll(x => actualWorkload.Contains(x));
}
//do something with workitems Process(actualWorkload);

我的问题是:可以'Take'和'Remove'以某种方式合并,这样只需要一个步骤来获取项目并直接从列表中删除这些项目?我搜索了一些东西,它代表了一个BlockingCollection的'Take',它会在返回时移除一个项目。

2 个答案:

答案 0 :(得分:0)

即使存在允许该操作的操作,在后台仍然需要删除并添加它们。

但也许你不需要两个名单?也许你只能有一个包含所有项目的列表,并且每个项目的状态都设置为不同的值或其他值。但是,当然,我不知道你的具体情况,所以这可能是不可行的。

答案 1 :(得分:0)

“取出并删除”声音给我很像“Dequeue”,所以也许你可以使用QueueConcurrentQueue

但是,枚举器不会从队列中删除项目,因此您必须自己反复调用Dequeue

相关问题