如何在MVC.NET中对列表值求和以生成图表?[已解决]
解决MVC.NET中对列表valor值求和的问题
嘿,你已经把图表数据的基础逻辑搭得差不多啦,现在只需要把计数逻辑改成求和就行,很容易搞定!
直接修改现有代码的方式
你当前用list.Count(x => x.VehicleId == item)统计每个VehicleId的条目数,只需要把Count换成Sum方法,指定要求和的valor字段就行:
public ActionResult Conso() { var veh = from s in db.Fuel select s; var list = veh.ToList(); List<int> repartitions = new List<int>(); var comp = list.Select(x => x.VehicleId).Distinct(); foreach (var item in comp) { // 替换Count为Sum,指定求和字段为valor repartitions.Add(list.Sum(x => x.VehicleId == item ? x.valor : 0)); } var rep = repartitions; ViewBag.COMP = comp; ViewBag.REP = repartitions.ToList(); return View(); }
更高效的优化方案(推荐)
上面的写法能实现需求,但每次循环都要遍历整个列表,数据量大时性能会打折扣。更推荐用GroupBy直接分组求和,代码更简洁也更高效:
public ActionResult Conso() { // 一步完成分组+求和 var groupedData = db.Fuel .GroupBy(fuel => fuel.VehicleId) .Select(group => new { VehicleId = group.Key, TotalValor = group.Sum(fuel => fuel.valor) }) .ToList(); // 拆分分组结果给ViewBag ViewBag.COMP = groupedData.Select(data => data.VehicleId); ViewBag.REP = groupedData.Select(data => data.TotalValor).ToList(); return View(); }
关键注意点
- 确保
Fuel实体类里的valor是数值类型(比如int、decimal),如果字段名和你实际用的不一样,记得替换成真实字段名。 GroupBy的写法减少了不必要的列表遍历,不管数据量大小,性能和可读性都比原来的循环更好。
内容的提问来源于stack exchange,提问作者Nellio
相关产品推荐
相关产品推荐

