按查询查询LINQ组中的组号

Dav*_*e M 6 c# linq group-by

我一直在使用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++;
}
Run Code Online (Sandbox Code Playgroud)

但是,我确信可以使用LINQ来生成groupNumber.怎么样?

Kob*_*obi 9

这取决于您的确切需求,但您可以使用:

var groupArray = groups.ToArray();
Run Code Online (Sandbox Code Playgroud)

同样,你可以使用ToList.这些数据结构是顺序的,每个组都有一个索引.


如果确实需要您创建的对象的索引,则另一个选项是使用Select:

list.GroupBy(c => c.Name)
    .Select((details, ind) =>
    new
    {
        Name = details.Key,
        DetailRecords = details,
        Index = ind
    });
Run Code Online (Sandbox Code Playgroud)


Lui*_*cio 6

这应该做的伎俩:

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++};
Run Code Online (Sandbox Code Playgroud)