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

如何仅向列表添加未处理过的ProductID求和项?(C#-ASP.NET)

问题分析与修复方案

嘿,我一眼就看出问题出在哪了——你用来判断「是否已处理过ProductID」的逻辑完全搞反了!

你现在用quantityArrayList.Contains(product)来检查,但quantityArrayList里存的是求和后的Quantity数值,不是ProductID本身啊!比如如果某个ProductID是3,而之前刚好有个求和结果也是3,代码就会错误跳过这个ProductID;要是ProductID的数值和所有求和结果都不一样,那重复出现的ProductID会被反复计算,导致列表里多出重复的求和值,这就是你看到后续结果异常的原因。


两步搞定问题

1. 单独维护已处理的ProductID集合

咱们需要一个专门的集合来记录已经处理过的ProductID,推荐用HashSet<int>(假设你的ProductID是int类型),它的Contains查询速度比列表快很多,适合做去重判断。

2. 修正循环判断逻辑

把原来判断求和列表的代码,改成判断这个新的ProductID集合。同时,我还帮你优化了查询效率——原代码每次循环都查一遍数据库,数据量大的时候会慢到离谱,咱们可以一次性把所有需要的结果从数据库里查出来。


修正后的代码

基础修复版(保留你原来的逻辑结构)

// 新增HashSet跟踪已处理的ProductID
var processedProductIds = new HashSet<int>();
var quantityArrayList = new List<int>();

// 获取所有符合条件的ProductID(会有重复,后续去重)
var dynamicReader = DBAccessor.InvoiceLines.Where(xx => xx.Quantity >= quantitySelected).Select(yy => yy.ProductID);

foreach (var productId in dynamicReader)
{
    if (!processedProductIds.Contains(productId))
    {
        // 计算该ProductID的总Quantity
        var totalQty = DBAccessor.InvoiceLines.Where(gg => gg.ProductID == productId).Sum(g => g.Quantity);
        quantityArrayList.Add(totalQty);
        processedProductIds.Add(productId); // 标记为已处理,避免重复计算
    }
}

高效优化版(只查一次数据库,推荐用这个!)

直接让数据库帮我们完成分组求和,比在客户端循环高效太多:

// 一次查询搞定:筛选→分组→求和
var productTotals = DBAccessor.InvoiceLines
    .Where(line => line.Quantity >= quantitySelected)
    .GroupBy(line => line.ProductID)
    .Select(group => new 
    { 
        ProductID = group.Key, 
        TotalQuantity = group.Sum(item => item.Quantity) 
    })
    .ToList();

// 提取求和结果到你的列表里
var quantityArrayList = productTotals.Select(result => result.TotalQuantity).ToList();

验证你的示例场景

当用户输入2时:

  1. 数据库先筛选出所有Quantity≥2的行,对应的ProductID是9、8、9...
  2. 按ProductID分组后,自动去重得到9和8,分别计算总Quantity为3和9
  3. 最终quantityArrayList就是[3,9],完全符合你的预期,不会出现异常值

内容的提问来源于stack exchange,提问作者SeventhWarhawk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:37:43