2015-09-06 68 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; 
} 

採取返回序列中的開始的連續元素指定數量。

跳過跳過序列中指定數量的元素,然後返回其餘元素。

+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); 
      } 
     }