使用LINQ按组添加递增属性到IEnumerable

Lar*_*nal 0 linq

为了简化场景,假设我们有一个具有FirstName和LastName属性的People列表.

我们的数据如下:

Bob    Smith
Jane   Smith
Todd   Grover
Larry  Lewis
Jill   Lewis
Frank  Lewis
Run Code Online (Sandbox Code Playgroud)

第一步是添加一个Integer属性,该属性为每个项目增加:

Bob    Smith  1
Jane   Smith  2
Todd   Grover 3
Larry  Lewis  4
Jill   Lewis  5
Frank  Lewis  6
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想为每个新组重置计数器以实现此目的:

Bob    Smith  1
Jane   Smith  2
Todd   Grover 1
Larry  Lewis  1
Jill   Lewis  2
Frank  Lewis  3
Run Code Online (Sandbox Code Playgroud)

也许LINQ不合适.看起来LINQ应该能够优雅地做到这一点.

Luk*_*keH 6

如果您只想要一个随每个项目递增的计数器:

var query = people
    .Select((x, i) => new { x.FirstName, x.LastName, Index = i + 1 });
Run Code Online (Sandbox Code Playgroud)

或者,如果要重置每个组的计数器,请按以下方式分组LastName:

var query = people
    .GroupBy(x => x.LastName)
    .Select
    (
        x => x.Select((y, i) => new { y.FirstName, y.LastName, Index = i + 1 })
    )
    .SelectMany(x => x);
Run Code Online (Sandbox Code Playgroud)

并快速显示查询结果:

foreach (var item in query)
{
    Console.WriteLine(item.FirstName + "\t" + item.LastName + "\t" + item.Index);
}
Run Code Online (Sandbox Code Playgroud)