From de2ce97034322df9473bcab57971463767427b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=BE=8E=E8=8D=A3?= <10755671+mei-rong-he@user.noreply.gitee.com> Date: Fri, 8 May 2026 10:25:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/BIController/BIKanBanController.cs | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) 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)