C # LINQ GroupBy для преобразования списка в группу с одним свойством в виде списка значений - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть список объектов list1

Name Value
N1   V100 
N2   V101
N1   V102
N4   V103
N4   V104

Я хочу преобразовать это в сгруппированный список

Name Values
N1   V100, V102 
N2   V101
N4   V103, V104

Когда я использую GroupBy, я получаю все это, ( list1.GroupBy(key => key.Name) )

Name Values
N1
  N1   V100
  N1   V102
N2
  N2   V101
N4
  N4   V103
  N4   V104

Я просто хочу значения в виде списка.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Добавив еще один ответ здесь (который, кажется, был удален, я пробовал этот подход и заставил его работать тоже).
Вся заслуга этому анониму.

    source.GroupBy(x => x.Name, y=> y.Value)
          .Select( result => new { Name = result.Name,
                                   Values = result.Select(r=> r.Value).ToList() } );

Словарное решение кажется более интуитивным, так как я вижу все преобразования, производящие результат.

РЕДАКТИРОВАТЬ:

Потратил слишком много времени на это, вот еще 2 способачтобы это произошло: -

source.GroupBy(grpKey => grpKey.Name, 
                   elementSelector => elementSelector,
                   (resultSelectorName, resultSelectorValues ) => new 
                   {
                     Name = resultSelectorName,
                     Values = resultSelectorValues.Select(v=>v.Value).ToList() 
                   });

2)

source.GroupBy(grpKey => grpKey.Name, 
               elementSelector => elementSelector.Value,
               (resultSelectorName, resultSelectorValue ) => new 
               {
                 Name = resultSelectorName,
                 Values = resultSelectorValue.ToList() 
               });
0 голосов
/ 20 декабря 2018

После GroupBy используйте ToDictionary:

source.GroupBy(x => x.Name)
      .ToDictionary(x => x.Key, x => x.Select(e => e.Value).ToList());

. Это дает Dictionary<string, List<string>>, где ключи - это имена, а значения - списки, составленные из проецирования каждого элемента в stringв этой конкретной группе.

Я предполагаю , что Value является string только для целей примера, но в действительности это не имеет значения, поскольку решение остается тем же.

...