为了简化场景,假设我们有一个具有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应该能够优雅地做到这一点.
如果您只想要一个随每个项目递增的计数器:
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)