Как использовать условие массовой вставки для определенного количества записей внутри цикла for - PullRequest
0 голосов
/ 28 мая 2020

Я хочу использовать концепцию массовой вставки в C#, когда количество достигнет 20. Если у нас есть 40 номеров, не проблема. но если мы получим 39 записей, возникнет проблема, если условие. как мы можем избежать этой проблемы. здесь ниже я добавил простую программу для справки.

var numbers = 39  // not static numbers
int count = 0;
for(int i=0; i<=numbers; i++)
{

 count++;
 if (count == 20)
   {
      //Logic
      count = 0;
   }

}

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вы можете определить, следует ли вставлять остальные файлы в пакетном режиме, сравнив счетчик с оставшимся количеством файлов.

int num = 49;
int count = 0;
for(int i = 1; i <= num; i++)
{
    count++;
    var n = i / 20;
    if(i % 20 == 0 ||count == (num - 20 * ( i / 20)))
    {
        //Logic        
        count = 0;
    }
}
0 голосов
/ 28 мая 2020

Нет необходимости в переменной count, вы можете использовать оператор по модулю внутри для l oop

Like

for(int i = 0; i <= numbers; i++)
{
    //i != 0 to avoid bulk process at first
    if(i != 0 && i % 20 == 0)
    {
       //Your bulk operation
    }

}

Я рекомендую вам использовать Console.WriteLine() для вывода значений i и counter на каждой итерации, чтобы вы понимали ошибку в своем коде.

var numbers = 39  // not static numbers
int count = 0;
for(int i=0; i<=numbers; i++)
{

 count++;

 //Print values to understand flow of program 
 Console.WriteLine($"For i = {i}, value of count is {count}");

 if (count == 20)
   {
      Console.WriteLine("Time to reset count variable");
      //Logic
      count = 0;

   }

}

Вы можете использовать Linq .Skip() и .Take() , делать партии

var batchSize = 20;
var batchCount = files.Count() / batchSize;
for (int i = 0; i < batchCount; i++)
{
  var bulkFiles = files.Skip(i * batchSize).Take(batchSize);
}
...