2015-09-06 2 views
-3

Мое требование состоит в том, чтобы получить список клиентов, а затем создать pdf-файл для каждого из них и отправить по электронной почте в виде вложения (но условие заключается в отправке только 10 вложений на электронную почту). Итак, достигните этого. Я запрашиваю базу данных с помощью Linq и получаю список клиентов в список, используя приложение WCF. Но в моем случае я могу получить любое количество клиентов, так как я могу сегментировать полный список в 10 вложений на электронную почту? Пожалуйста, предложите мне об этом. Благодарю.Как разбить список на части в C#?

+0

Не видя какого-либо кода, сложно дать очень надежный ответ, но поскольку вы используете Linq, есть расширения для итерации по количеству по количеству. Взгляните на мой ответ ниже. – thewisegod

ответ

1

Мой код заставит вас идти. Читайте на IEnumerable и проверить методы, как показано ниже:

int alreadyProcessesCount = 0; 
while (myList.Any()) 
{ 
    var emailList = myList.Skip(alreadyProcessesCount).Take(10); 

    // code to attach and send here 
    alreadyProcessesCount += 10; 
} 

Take возвращает указанное число подряд идущих элементов с начала последовательности.

Пропустить обход определенного количества элементов в последовательности и затем вернуть остальные элементы.

+0

вы ничего не убираете из myList, поэтому myList.Any() всегда будет правдой, что приведет к бесконечному циклу, – Yohannes

+0

Здесь не полный код кода, просто что-то, что нужно сделать баранам. Да, для перемещения по списку должен быть какой-то тип итератора, но, как видите, он не предоставил никакого кода выше. – thewisegod

+0

Спасибо, что сработало – barsan

1

Некоторое время назад я создал эту функцию, чтобы разделить Enumerbales партиями, чтобы обработать их

использование разделить список/перечислимы в части 10 пунктов выглядит следующим образом

foreach(var batch in mySource.Batch(10)) 
{ 
//.. Code to handle a part 
} 

Исходник-:

public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(this IEnumerable<TSource> source, int size) 
     { 
      TSource[] bucket = null; 

      int count = 0; 

      foreach (TSource item in source) 
      { 
       if (bucket == null) 
       { 
        bucket = new TSource[size]; 
       } 

       bucket[count++] = item; 

       if (count != size) 
       { 
        continue; 
       } 

       yield return bucket; 

       bucket = null; 
       count = 0; 
      } 

      if (bucket != null && count > 0) 
      { 
       yield return bucket.Take(count); 
      } 
     } 
Смежные вопросы