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

如何在LINQ中对字符串类型的求和字段进行分组求和?

解决字符串类型Qty分组求和的问题

你的整体思路完全没问题——先截取Id前缀、再按分组聚合求和,核心问题就出在Qty是字符串类型,LINQ的Sum方法没法直接对字符串做数值求和,得先把字符串转成数值类型再处理。

错误根源

你代码里的ids.Sum(a => a.qty)直接对字符串调用Sum,但C#的LINQSum没有针对字符串的重载,编译器自然会报错提示无法转换类型。

修正后的完整代码

我们只需要在转换阶段把字符串Qty转成数值类型(比如int或decimal,根据业务需求选,这里用int举例),求和后如果需要返回字符串格式的结果,再转回去就行:

var res = _listOfProductIdAndStock
    .Where(ids => ids.product_sku.Contains("-"))
    .Select(ids => new 
    { 
        id = ids.product_sku.Split('-')[0], 
        // 先把字符串Qty转为int类型,注意如果Qty可能有非数字值要加异常处理
        qty = int.Parse(ids.qty) 
    })
    .GroupBy(item => item.id)
    .Select(group => new 
    { 
        id = group.Key, 
        // 求和后转回字符串,匹配你预期的输出格式
        qty = group.Sum(item => item.qty).ToString() 
    })
    .ToList();

额外优化提示

  • 如果Qty字段可能存在空值、非数字字符串的情况,建议用int.TryParse避免运行时异常:
.Select(ids => 
{
    if (int.TryParse(ids.qty, out int numericQty))
    {
        return new { id = ids.product_sku.Split('-')[0], qty = numericQty };
    }
    // 转换失败时可以返回null,后续过滤掉这类数据
    return null;
})
.Where(item => item != null) // 过滤转换失败的条目
  • 另外Split(Convert.ToChar("-"))可以简化成Split('-'),C#支持直接传入字符作为分隔符参数,代码更简洁。

这样处理后就能得到你想要的结果:[0] Id: "000123", Qty: "50"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:38