如何使用LINQ将List<Dictionary<string,string>>转换为List<List<string>>
使用LINQ将List<Dictionary<string,string>>转换为List<List>
你可以通过嵌套的LINQ查询实现这个转换,核心逻辑是遍历外层列表中的每个字典,将字典的每一组键值对拼接成"键:值"格式的字符串,再把这些字符串收集为列表,最终组合成目标结构。
实现代码
// 原始数据(注意:C#标准Dictionary不允许重复键,示例中重复添加"Meal"会报错,实际场景需规避) var originalMenu = new List<Dictionary<string, string>> { new Dictionary<string, string> { { "Meal", "Pasta" }, { "Meal", "Pizza" } }, new Dictionary<string, string> { { "Entree", "Calamari Salad" } } }; // LINQ转换 var convertedMenu = originalMenu .Select(dict => dict .Select(kvp => $"{kvp.Key}:{kvp.Value}") .ToList()) .ToList();
代码说明
- 外层
Select:遍历原始列表中的每个Dictionary<string, string>对象 - 内层
Select:针对每个字典的KeyValuePair<string, string>,用字符串插值拼接成"键:值"格式的字符串 - 两次
ToList():分别将内层的字符串序列转为List<string>,外层的序列转为List<List<string>>
注意事项
C#的Dictionary<TKey, TValue>不允许存在重复键,你的示例代码中尝试在同一个字典里添加两个"Meal"键会直接抛出ArgumentException。如果实际业务需要存储重复键的键值对,建议改用List<KeyValuePair<string, string>>承载数据,转换逻辑完全一致:
var originalMenu = new List<List<KeyValuePair<string, string>>> { new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("Meal", "Pasta"), new KeyValuePair<string, string>("Meal", "Pizza") }, new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("Entree", "Calamari Salad") } }; var convertedMenu = originalMenu .Select(kvpList => kvpList .Select(kvp => $"{kvp.Key}:{kvp.Value}") .ToList()) .ToList();
内容的提问来源于stack exchange,提问作者JPil
相关产品推荐
相关产品推荐

