0

我对我的代码有点强迫症,想知道其他人如何构建以下示例控制流。我还没有找到任何通过我的“漂亮”代码测试的东西。

var records = repo.GetRecords(batch:10);

while(records.Any())
{
    var processed = ProcessRecords(records);        
    repo.DeleteRecords(processed);      
    records = repo.GetRecords(batch:10);
}

谢谢

4

2 回答 2

1

类似于上面的@John Kugleman,但使用 while 而不是 for。

while (true)
{
    var records = repo.GetRecords(batch:10);

    if (!records.Any()) break;

    var processed = ProcessRecords(records);        
    repo.DeleteRecords(processed);      
}

您还可以找到这样的问题:

使用 LINQ 将列表拆分为子列表

那问如何“分块”一系列项目。该技术可能适用于您的情况,也可能不适用于您的情况。

假设使用 Chunk 扩展方法(类似于@TickleMeElmo 的答案或从@JaredPar 的答案拆分),您的代码可能如下所示:

foreach (var chunk in repo.GetRecords().Chunk(10))
{
  var processed = ProcessRecords(chunk);
  repo.DeleteRecords(processed);
}

如果您已经在存储库中内置了某种“分块”,则此习惯用法可能效果不佳。

于 2013-04-12T18:35:31.623 回答
1
while (true)
{
    var records = repo.GetRecords(batch:10);

    if (!records.Any())
        break;

    var processed = ProcessRecords(records);        
    repo.DeleteRecords(processed);      
}
于 2013-04-12T18:20:18.623 回答