如何根据IsActiveFlag合并C# Linq逻辑,避免查询重复代码?
重构方案:合并重复逻辑
直接把重复的查询逻辑抽离,用条件动态控制过滤规则,代码更简洁:
// 先把重复访问的参数存成变量,减少重复书写 var inputParams = engDetails.TransitionDetails.InputParametersJson; // 处理ComponentEngagements集合 if (inputParams.CompEngagements != null) { var compEngQuery = inputParams.CompEngagements; // 仅当需要过滤时,添加状态判断 if (IsActiveOnly) { compEngQuery = compEngQuery.Where(x => x.Status.CaseInsensitiveEquals("Ready")); } tarEngagementIds.AddRange(compEngQuery.Select(x => x.TargetEngagementId).ToList()); } // 处理单个TargetEngagementId // 逻辑:要么不需要过滤,要么需要过滤且状态为Ready if (!IsActiveOnly || inputParams.Status.CaseInsensitiveEquals("Ready")) { tarEngagementIds.Add(inputParams.TargetEngagementId); }
重构思路:
- 把重复访问的
InputParametersJson提取成局部变量,避免多次链式调用,提升可读性和性能 - 集合处理部分:先拿到原始集合,再根据
IsActiveOnly决定是否添加状态过滤,不用写两遍几乎一样的AddRange逻辑 - 单个ID部分:用逻辑或(
||)合并两种分支的判断条件,把原来if-else里的两个添加操作合并成一个,减少分支嵌套
内容的提问来源于stack exchange,提问作者Ankur Pandey
相关产品推荐
相关产品推荐

