求助:将扁平List转换为四层嵌套Dictionary的多属性分组实现
解决扁平List转四层嵌套字典的问题
看起来你卡在把扁平列表转成四层嵌套字典这一步了,我之前也处理过类似的多层分组需求,给你一个直接可行的方案:
首先先补全一下你的ApprovalAction类(假设你还有另外两个用于分组/取值的属性,你可以根据实际业务替换成自己的字段):
public class ApprovalAction { public string Name { get; set; } public string Step { get; set; } public string ApprovalRequestType { get; set; } public string ThirdGroupKey { get; set; } // 替换成你实际的第三层分组属性 public string TargetValue { get; set; } // 替换成你实际要存储的字符串值 }
接下来用Linq逐层分组并转换为字典,完全匹配你需要的Dictionary<string,Dictionary<string,Dictionary<string,Dictionary<string,string>>>>类型:
var approvalActions = Gen(); var nestedDictionary = approvalActions // 第一层:按Step分组,转成以Step为键的字典 .GroupBy(action => action.Step) .ToDictionary( stepGroup => stepGroup.Key, stepGroup => stepGroup // 第二层:在每个Step分组内,按ApprovalRequestType分组 .GroupBy(action => action.ApprovalRequestType) .ToDictionary( typeGroup => typeGroup.Key, typeGroup => typeGroup // 第三层:在每个ApprovalRequestType分组内,按第三个属性分组 .GroupBy(action => action.ThirdGroupKey) .ToDictionary( thirdGroup => thirdGroup.Key, // 第四层:转成以Name为键、目标字符串为值的字典 thirdGroup => thirdGroup.ToDictionary(action => action.Name, action => action.TargetValue) ) ) );
注意事项:
- 如果存在重复的层级键(比如同一个
Step→ApprovalRequestType→ThirdGroupKey→Name组合出现多次),ToDictionary会抛出异常。这时候你可以根据需求处理:- 取第一个匹配的值:
thirdGroup.ToDictionary(action => action.Name, action => action.TargetValue.First()) - 合并重复值:
thirdGroup.ToDictionary(action => action.Name, action => string.Join(";", action.TargetValue))
- 取第一个匹配的值:
- 你可以把代码里的
ThirdGroupKey和TargetValue替换成你实际业务中对应的属性,只要保证每一层的键是字符串类型、最终值是字符串类型即可。
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

