2014-10-02 3 views
0

У меня есть небольшая проблема, связанная с выражением LINQ для некоторой группы, которую я хотел бы сделать. У меня есть большой список, возможно, нескольких тысяч писем, которые нужно отправить, и я хотел бы сгруппировать их в списки из 2000 писем и поместить их в родительский список. Оригинальный список выглядит следующим образом: List<Recipient>()Группировка элементов списка с GroupBy

Получатели имеют имя, адрес и т.д.

Я написал то, что я хочу сделать с Еогеасп, но если это возможно Я бы хотел, чтобы он как 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 wouldn't позвольте мне выбрать из списка получателей.

ответ

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

Да, я просто понял, что, как хорошо ... Я не знаю, где я пошло не в первый раз, но теперь он работает ... – Todtaure

+0

@Todtaure спасибо чувак! иногда бывает. Я рад, что помог. – Christos