Число группы в группе LINQ запросом

Я использовал 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. Как?

6
задан Dave M 19 July 2010 в 17:10
поделиться

3 ответа

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

var groupArray = groups.ToArray();

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


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

list.GroupBy(c => c.Name)
    .Select((details, ind) =>
    new
    {
        Name = details.Key,
        DetailRecords = details,
        Index = ind
    });
9
ответ дан 8 December 2019 в 14:39
поделиться

, если это просто последовательный номер группы, просто используйте метод 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 .

1
ответ дан 8 December 2019 в 14:39
поделиться

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

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++};
6
ответ дан 8 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: