Я использовал 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. Как?
Это зависит от ваших конкретных потребностей, но вы можете использовать:
var groupArray = groups.ToArray();
Точно так же вы можете использовать ToList
. Эти структуры данных являются последовательными, и каждая группа имеет индекс.
Если вам действительно нужен индекс для создаваемого вами объекта, другой вариант - использовать Выбрать
:
list.GroupBy(c => c.Name)
.Select((details, ind) =>
new
{
Name = details.Key,
DetailRecords = details,
Index = ind
});
, если это просто последовательный номер группы, просто используйте метод 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
.
это должно сработать:
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++};