You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:28:47