我的要求是获取客户列表,然后为每个客户创建pdf并作为附件发送到电子邮件中(但条件是每封电子邮件只发送10个附件)。所以要实现这一点我使用Linq查询数据库并使用WCF应用程序将客户列表放入列表中。但在我的情况下,我可能会得到任意数量的客户,那么如何将每个电子邮件的总列表分成10个附件?请建议我这个。感谢。
答案 0 :(得分:1)
我的代码可以帮助你。阅读IEnumerable并查看以下方法:
int alreadyProcessesCount = 0;
while (myList.Any())
{
var emailList = myList.Skip(alreadyProcessesCount).Take(10);
// code to attach and send here
alreadyProcessesCount += 10;
}
从序列的开头返回指定数量的连续元素。
跳过绕过序列中指定数量的元素,然后返回剩余的元素。
答案 1 :(得分: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);
}
}