2016-05-20 2 views
0

Я хочу сгруппировать свои данные по имени и сумме, каждая возвращаемая группа должна иметь уникальный идентификатор, который увеличивается на каждую группу в данных.Как назначить идентификатор автоинкремента по каждой группе в LINQ?

Это соответствующая бит код:

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, в то время как мне это нужно для LINQ в C#.

ответ

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 
        }) 
       })); 
Смежные вопросы