对于我希望做的某些分组,我遇到一个LINQ表达式有点麻烦。
我有一个很大的列表,可能需要发送几千封邮件,我想把它们分成2000个邮件列表并将它们放入父列表中。
原始列表如下所示:List<Recipient>()
收件人有姓名,地址等。
我已经用foreach编写了我想做的事情,但是如果可能的话我希望将它作为LINQ表达式,我似乎无法理解它。
private List<List<Recipient>> PhysicalPageList(List<Recipient> recipients)
{
var pageList = new List<List<Recipient>>();
var smallList = new List<Recipient>();
foreach (var rec in recipients)
{
smallList.Add(rec);
if (smallList.Count % 2000 == 0) { continue; }
var tmpList = new List<Recipient>();
tmpList.AddRange(smallList);
pageList.Add(smallList);
smallList.Clear();
}
if (smallList.Count() != 0)
{
var tmpList = new List<Recipient>();
tmpList.AddRange(smallList);
pageList.Add(tmpList);
smallList.Clear();
}
return pageList;
}
我有一个关于字符串而不是收件人的例子(我自己没有写过):
private List<List<string>> PageList(List<string> recipients)
{
return recipients.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / 2000)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}
我尝试了同样的但LINQ不允许我从收件人列表中选择。
答案 0 :(得分:1)
为什么你不尝试这个?
private List<List<Recipient>> PageList(List<Recipient> recipients)
{
return recipients.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / 2000)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}