diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs index 1179e87..d865a4f 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs @@ -947,16 +947,23 @@ namespace APT.SC.WebApi.Controllers.Api.BI } //行转列 var groupList = riskTempList - .GroupBy(x => x.companyName) - .Select(g => new RiskList - { - companyName = g.Key, - majorCount = g.First(x => x.riskType == SKEvaluateLevelEnum.重大风险.GetDescription()).cnt, - largerCount = g.First(x => x.riskType == SKEvaluateLevelEnum.较大风险.GetDescription()).cnt, - generalCount = g.First(x => x.riskType == SKEvaluateLevelEnum.一般风险.GetDescription()).cnt, - lowCount = g.First(x => x.riskType == SKEvaluateLevelEnum.低风险.GetDescription()).cnt, - totalCount = g.Sum(x => x.cnt) - }).ToList(); + .GroupBy(x => x.companyName) + .Select(g => + { + // 先把当前公司的风险类型和数量转成字典,避免多次遍历分组 + var riskDict = g.ToDictionary(x => x.riskType, x => x.cnt); + + return new RiskList + { + companyName = g.Key, + majorCount = riskDict.TryGetValue(SKEvaluateLevelEnum.重大风险.GetDescription(), out var major) ? major : 0, + largerCount = riskDict.TryGetValue(SKEvaluateLevelEnum.较大风险.GetDescription(), out var larger) ? larger : 0, + generalCount = riskDict.TryGetValue(SKEvaluateLevelEnum.一般风险.GetDescription(), out var general) ? general : 0, + lowCount = riskDict.TryGetValue(SKEvaluateLevelEnum.低风险.GetDescription(), out var low) ? low : 0, + totalCount = riskDict.Sum(x => x.Value) + }; + }) + .ToList(); if (orgList != null && orgList.Any()) { foreach (var item in orgList)