如何将列表拆分为c#中的部分?

时间:2015-09-06 15:29:09

标签: c# linq list

我的要求是获取客户列表,然后为每个客户创建pdf并作为附件发送到电子邮件中(但条件是每封电子邮件只发送10个附件)。所以要实现这一点我使用Linq查询数据库并使用WCF应用程序将客户列表放入列表中。但在我的情况下,我可能会得到任意数量的客户,那么如何将每个电子邮件的总列表分成10个附件?请建议我这个。感谢。

2 个答案:

答案 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);
            }
        }