如何用C# LINQ将分组数据转为值为字符串列表的字典
解决思路与修正代码
你的问题核心在于ToDictionary的value选择逻辑:原代码用data.First()[2]仅提取了每组的第一个元素的第三个值,而非收集组内所有匹配元素的第三个值。只需调整这部分逻辑,即可生成目标格式的字典:
修正后的代码:
var dimData = System.IO.File.ReadLines(PathofOutputFile) .Select(line => line.Split(';')) .GroupBy(data => data[0], StringComparer.OrdinalIgnoreCase) .ToDictionary( group => group.Key, group => group.Select(item => item[2]).ToList(), StringComparer.OrdinalIgnoreCase );
关键修改说明
- 将
data => data.First()[2]替换为group => group.Select(item => item[2]).ToList():group.Select(item => item[2])遍历分组内的所有字符串数组,提取每个数组的第三个元素(索引为2).ToList()将提取出的所有字符串转换为List<string>,完美匹配Dictionary<string, List<string>>的类型要求
可选健壮性优化
如果CSV文件中存在分割后元素不足3个的行,建议添加过滤逻辑避免索引越界:
var dimData = System.IO.File.ReadLines(PathofOutputFile) .Select(line => line.Split(';')) .Where(arr => arr.Length >= 3) // 过滤无效行 .GroupBy(data => data[0], StringComparer.OrdinalIgnoreCase) .ToDictionary( group => group.Key, group => group.Select(item => item[2]).ToList(), StringComparer.OrdinalIgnoreCase );
内容的提问来源于stack exchange,提问作者BabyHai
相关产品推荐
相关产品推荐

