C#Linq Groupby将列表转换为一个属性列表的组



我有一个对象列表 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

我只想将值作为列表。

GroupBy后,使用 ToDictionary

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

这将产生一个Dictionary<string, List<string>>,其中键是名称,并且值是列表,由将每个元素投射到该特定组下的string

我假设 Valuestring的目的,但实际上,这并不重要,因为该解决方案保持不变。

在这里添加另一个答案,(似乎已经删除了,我正在尝试这种方法,也可以工作)。
所有的荣誉都归功于那个匿名人士。

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

词典解决方案似乎更加直观,因为我可以看到所有发生的变换生成结果。

编辑:

花了太多时间在这方面,这还有其他两种实现这一目标的方法: -

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() 
               });

相关内容

  • 没有找到相关文章

最新更新