如何将List<MyData>转为以Id为键、Name逗号拼接为值的Dictionary<int,string>
解决List转Dictionary<int, string>(按Id分组拼接Name)
你当前使用ToLookup的分组逻辑是正确的,只需将值的处理逻辑从转列表改为拼接分组内的所有Name属性即可。
修改后的代码
var dict = lst.ToLookup(x => x.Id) .ToDictionary(x => x.Key, x => string.Join(", ", x.Select(item => item.Name)));
代码说明
ToLookup(x => x.Id):按Id对原列表进行分组,每个分组是包含相同Id的所有MyData对象的IGrouping<int, MyData>集合string.Join(", ", x.Select(item => item.Name)):遍历当前分组的所有元素,提取Name属性,用,作为分隔符拼接成字符串
完整可运行示例
public class MyData { public int Id { get; set; } public string Name { get; set; } } // 初始化测试列表 List<MyData> lst = new List<MyData>(); lst.Add(new MyData { Id = 1, Name = "Test" }); lst.Add(new MyData { Id = 2, Name = "Test2" }); lst.Add(new MyData { Id = 1, Name = "Test3" }); // 执行转换 var dict = lst.ToLookup(x => x.Id) .ToDictionary(x => x.Key, x => string.Join(", ", x.Select(item => item.Name))); // 输出验证 foreach (var kvp in dict) { Console.WriteLine($"Dictionary<{kvp.Key}, \"{kvp.Value}\">"); }
输出结果
Dictionary<1, "Test, Test3"> Dictionary<2, "Test2">
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

