如何在循环中累加每个计算结果并存储到容器中?
累加计算结果并存储展示的解决方案
你的代码当前存在几个问题导致无法正确累加所有省份的百分比:
- 每次循环都重新初始化
total、temp2为0,无法保留之前的累加值 - 内部的for循环没有实际作用,只是重复赋值同一个数值,无法实现累加
ViewBag.TotalPercent每次循环都会被覆盖,最终只保留最后一个省份的数值
以下是修正后的代码,实现了所有省份百分比的累加,并保留每个省份的单独数值:
// 在外部循环前初始化总累加变量 double totalPercent = 0; foreach (var prov in provs) { SpesGraduate x = new SpesGraduate(); x.Province = prov.Province; x.yr1_TotalGrad = placed2.Where(plc => plc.POID == prov.ID).Count(); x.yr1_ColTechvocGrad = placed2.Where(plc => plc.POID == prov.ID && (plc.GradEduc == "Tech-Voc" || plc.GradEduc == "College")).Count(); x.yr1_PercentGrad = 0; x.yr2_TotalGrad = placed.Where(plc => plc.POID == prov.ID).Count(); double answer; if (x.yr2_TotalGrad == 0 && x.yr1_TotalGrad == 0) { answer = 0; } else if (x.yr2_TotalGrad == x.yr1_TotalGrad) { answer = 100; } else if (x.yr1_TotalGrad == 0 && x.yr2_TotalGrad != 0) { answer = x.yr2_TotalGrad * 100; } else if (x.yr1_TotalGrad != 0 && x.yr2_TotalGrad == 0) { // 注意:原代码中x.yr2_TotalGrad是0,乘以-100结果还是0,若要表示100%下降,应改为answer = -100; answer = -100; } else { double increase = (x.yr2_TotalGrad - x.yr1_TotalGrad); answer = (increase / x.yr1_TotalGrad) * 100; } // 保存当前省份的百分比 x.yr2_Percentage = answer; // 累加至总百分比 totalPercent += answer; Graduates.Add(x); } // 将总累加值存入ViewBag,供前端表格展示 ViewBag.TotalPercent = totalPercent;
关键修改说明:
- 将总累加变量
totalPercent移到外部循环之前初始化,确保每次循环都能累加之前的结果 - 移除了无意义的内部for循环,直接在每次循环中累加当前省份的百分比
- 修正了
x.yr2_TotalGrad ==0分支的逻辑(可选,根据你的业务需求调整) - 循环结束后再将总累加值存入ViewBag,避免被多次覆盖
这样,你可以通过Graduates列表展示每个省份的单独百分比,通过ViewBag.TotalPercent展示所有省份的百分比总和。
内容的提问来源于stack exchange,提问作者Mark John Capistrano
相关产品推荐
相关产品推荐

