如何在LINQ中为每个组分配一个自动递增ID?

时间:2016-05-20 14:28:19

标签: c# linq group-by grouping

我想按名称和金额对数据进行分组,每个返回的组必须具有唯一的ID,该ID在数据中按组递增。

这是相关的代码:

return JsonConvert.SerializeObject(
                data.GroupBy(x=> new {x.Name, x.Amount})
                    .Where(gp => gp.Count() > 1)
                    .Select(
                        gp =>
                            new Group
                            {
                                GroupData = gp.Select(el => new GroupItem
                                {
                                    Name = el.Name,
                                    Amount = el.Amount,
                                    GroupId = <missing>
                                })
                            }));

我发现了几个问题,为组中的每一行添加增量ID,每组重置一次,但是我希望该组是这样的:

Group = {"bob", 145.20, 1},
        {"bob", 145.20, 1},
Group = {"steve", 120.00, 2},
        {"steve", 120.00, 2}..... etc  

我发现的唯一示例是在SQL中,而我需要在C#中使用LINQ。

1 个答案:

答案 0 :(得分:2)

您也可以使用传递索引的Select重载:

return JsonConvert.SerializeObject(
    data.GroupBy(x=> new {x.Name, x.Amount})
        .Where(gp => gp.Count() > 1)
        .Select((gp, idx) =>
                new Group
                {
                    GroupData = gp.Select(el => new GroupItem
                    {
                        Name = el.Name,
                        Amount = el.Amount,
                        GroupId = idx
                    })
                }));