为了账号安全,请及时绑定邮箱和手机立即绑定

C# LINQ GroupBy 将列表转换为具有一个属性作为值列表的组

C# LINQ GroupBy 将列表转换为具有一个属性作为值列表的组

C#
斯蒂芬大帝 2022-06-19 09:54:41
我有一个对象列表list1Name ValueN1   V100 N2   V101N1   V102N4   V103N4   V104我想将其转换为分组列表Name ValuesN1   V100, V102 N2   V101N4   V103, V104当我使用时,GroupBy我得到了整个东西,( list1.GroupBy(key => key.Name) )Name ValuesN1  N1   V100  N1   V102N2  N2   V101N4  N4   V103  N4   V104我只想将值作为列表。
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

之后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示例目的,但实际上,这并不重要,因为解决方案保持不变。


查看完整回答
反对 回复 2022-06-19
?
心有法竹

TA贡献1866条经验 获得超5个赞

有人在此处添加另一个答案(似乎已被删除,我正在尝试这种方法并使其也可以正常工作)。

所有的功劳都归于那个匿名的人。


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

               });


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信