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

如何从集合中筛选currencyId相同的对象求和,无需逐笔写else if?

实现方案

直接使用LINQ的GroupBy运算符按CurrencyId属性分组,一次性生成所有币种的汇总结果,无需为每个币种单独编写分支逻辑:

// 按CurrencyId分组求和,生成所有币种的汇总
var currencySums = resultModel
    .GroupBy(q => q.CurrencyId)
    .Select(g => new ReportModel
    {
        AccountName = $"Sum_Currency_{g.Key}",
        CurrencyId = g.Key,
        BalanceSum = g.Sum(q => q.Balance)
    })
    .ToList();

// 把汇总结果追加到resultModel中
resultModel.AddRange(currencySums);

如果需要保留你原有的CurrencyId=-1的特殊判断逻辑,可以调整为:

if(model.CurrencyId == -1)
{
    // 生成所有币种的汇总
    var allCurrencySums = resultModel
        .GroupBy(q => q.CurrencyId)
        .Select(g => new ReportModel
        {
            AccountName = "Sum",
            CurrencyId = g.Key,
            BalanceSum = g.Sum(q => q.Balance)
        });
    resultModel.AddRange(allCurrencySums);
}
else
{
    // 只汇总当前选择的币种
    resultModel.Add(new ReportModel
    {
        AccountName = "Sum",
        CurrencyId = model.CurrencyId,
        BalanceSum = resultModel.Sum(q => q.Balance)
    });
}
补充说明
  • GroupBy会自动遍历集合,把属性值相同的元素归为一组,分组的Key就是CurrencyId的值,有多少种不同的CurrencyId就会生成多少个分组,无需手动枚举所有可能的币种ID
  • 如果仅需要汇总某几个指定的CurrencyId,可以在GroupBy前加Where条件过滤,不需要单独写分支:
// 示例:仅汇总CurrencyId为1、2、3的币种
var targetCurrencyIds = new List<int> {1,2,3};
var sums = resultModel
    .Where(q => targetCurrencyIds.Contains(q.CurrencyId))
    .GroupBy(q => q.CurrencyId)
    .Select(g => new ReportModel
    {
        AccountName = "Sum",
        BalanceSum = g.Sum(q => q.Balance)
    })
    .ToList();
resultModel.AddRange(sums);
  • 如果需要生成全局总合计,可以额外在分组求和后加一条所有余额的求和逻辑即可

内容的提问来源于stack exchange,提问作者Poyraz Kürkçüoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:27:05