Номер группы в группе LINQ по запросу - PullRequest
6 голосов
/ 19 июля 2010

Я использовал 101 Образцы LINQ , чтобы намочить ноги с помощью LINQ.Это был хороший первый ресурс, но я не вижу там примера того, что мне сейчас нужно.

Мне просто нужно связать последовательный номер группы с каждой группой.У меня есть рабочее решение:

var groups =
   from c in list
   group c by c.Name into details
   select new { Name = details.Key, DetailRecords = details };


int groupNumber = 0;
foreach (var group in groups)
{
   // 
   // process each group and it's records ...
   // 

   groupNumber++;
}

Но я уверен, что можно использовать LINQ для генерации groupNumber.Как?

Ответы [ 3 ]

9 голосов
/ 19 июля 2010

Это зависит от ваших точных потребностей, но вы можете использовать:

var groupArray = groups.ToArray();

Аналогично, вы можете использовать ToList. Эти структуры данных являются последовательными, и каждая группа имеет индекс.


Если вам нужен индекс для создаваемого объекта, другой вариант - использовать Select:

list.GroupBy(c => c.Name)
    .Select((details, ind) =>
    new
    {
        Name = details.Key,
        DetailRecords = details,
        Index = ind
    });
6 голосов
/ 19 июля 2010

это должно сработать:

int groupNumber = 0;
var groups =
   from c in list
   group c by c.Name into details
   select new { Name = details.Key, DetailRecords = details, grpNum = groupNumber++};
1 голос
/ 19 июля 2010

если это просто порядковый номер группы, просто используйте метод Count () в IEnumerable.

var groups =
   from c in list
   group c by c.Name into details
   select new {Name = details.Key, DetailRecords = details};

for(int i = 0; i < groups.Count(); i++)
{
  //Process Records
}

Тогда, если вам нужен конкретный номер группы, вы можете просто взять i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...