我想知道,是否有一种优雅的方法可以从通用集合(在我的情况下为 a List<T>
)中删除多个项目,而无需执行诸如在 LINQ 查询中指定谓词以查找要删除的项目之类的操作?
我正在做一些批处理,其中我正在填充需要处理的对象类型List<T>
。Record
该处理以将每个对象插入数据库而结束。我不想构建列表,然后遍历每个单独的成员并处理/插入它,而是想对N
列表中的项目组执行事务性批量插入,因为它的资源密集度较低(其中N
代表BatchSize
我可以放入配置文件, 或同等学历)。
我想做类似的事情:
public void ProcessRecords()
{
// list of Records will be a collection of List<Record>
var listOfRecords = GetListOfRecordsFromDb( _connectionString );
var batchSize = Convert.ToInt32( ConfigurationManager.AppSettings["BatchSize"] );
do
{
var recordSubset = listOfRecords.Take(batchSize);
DoProcessingStuffThatHappensBeforeInsert( recordSubset );
InsertBatchOfRecords( recordSubset );
// now I want to remove the objects added to recordSubset from the original list
// the size of listOfRecords afterwards should be listOfRecords.Count - batchSize
} while( listOfRecords.Any() )
}
我正在寻找一种方法来一次完成这一切,而不是遍历子集并以这种方式删除项目,例如:
foreach(Record rec in recordSubset)
{
if( listOfRecords.Contains(rec) )
{
listOfRecords.Remove(rec);
}
}
我正在考虑使用List.RemoveRange( batchSize )
,但想先获得一些 StackOverflow 反馈 :) 您使用什么方法来最大限度地提高 C# 中批处理算法的效率?
非常感谢任何帮助/建议/提示!