如何优化C#/ASP.NET/EF Core中的多层foreach循环代码
代码优化方案
可以用LINQ的SelectMany结合Lambda表达式扁平化嵌套循环,大幅简化代码逻辑,同时完全保留原代码的业务规则:
var dataList = dataArray.SelectMany(data => { // 无车辆的情况,返回基础模型 if (!data.Cars.Any()) { return new[] { new MyModel { Name = data.Name, LastName = data.LastName, Model = "", SubModel = "" } }; } // 有车辆的情况,扁平化车辆和子模型 return data.Cars.SelectMany(car => { // 车辆无子模型的情况 if (!car.SubModels.Any()) { return new[] { new MyModel { Name = data.Name, LastName = data.LastName, Model = car.Model, SubModel = "" } }; } // 车辆有子模型的情况,每个子模型对应一个MyModel实例 return car.SubModels.Select(subModel => new MyModel { Name = data.Name, LastName = data.LastName, Model = car.Model, SubModel = subModel.Model }); }); }).ToList();
优化说明
- 用
SelectMany替代多层嵌套foreach,自动完成集合扁平化和元素收集,无需手动维护dataList - 采用对象初始化器简化
MyModel实例创建,避免重复的属性赋值操作 - 每个分支直接返回对应场景的模型集合,逻辑分层清晰,可读性更强
- 完全复刻原代码的业务规则:无车辆时添加空模型;有车辆但无子模型时添加对应车辆模型;有子模型时每个子模型生成独立实例
内容的提问来源于stack exchange,提问作者optPr1me
相关产品推荐
相关产品推荐

