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

ASP.NET Core 3.1中向ObjectCountViewModel列表添加求和值时Linq Sum报错的解决咨询

问题分析与解决方案

首先,咱们拆解下你遇到的错误:'IEnumerable' does not contain a definition for 'Sum' 这个提示的核心问题是——你调用Sum()的对象是对象集合(比如IEnumerable<YourMainObject>),而不是IEnumerable<decimal>这种数值类型的序列。Sum()方法需要直接作用于数值序列,所以必须先把要求和的decimal字段从对象里提取出来。

结合你之前的计数逻辑,咱们先优化原有代码(顺便提升性能),再给出正确的求和写法:

步骤1:优化原有计数逻辑(可选,但更高效)

原来的计数代码用Count()>0可以换成Any(),因为Any()只要找到符合条件的项就会停止遍历,比遍历全部项的Count()性能更好:

int itemsToCount = objects.Count(e => 
    e.ObjectItems.Any(ep => 
        ep.ObjectItemType.Description.Contains("ItemToCount") && 
        ep.ObjectItemSelctionType.Description.Contains("Taken")
    )
);
objectCounts.Add(new ObjectCountViewModel() { Description = "Items Counted", Count = itemsToCount });

步骤2:正确实现求和逻辑

假设你要对符合条件的ObjectItem中的某个decimal属性(比如ep.Amount,请替换成你实际要计算的字段)求和,代码应该这样写:

// 1. 先展开所有主对象的ObjectItems,筛选出符合条件的项,再对目标字段求和
decimal totalSum = objects
    .SelectMany(e => e.ObjectItems) // 把每个主对象的ObjectItems集合展开成扁平列表
    .Where(ep => 
        ep.ObjectItemType.Description.Contains("ItemToCount") && 
        ep.ObjectItemSelctionType.Description.Contains("Taken")
    )
    .Sum(ep => ep.Amount); // 替换成你实际要求和的decimal属性

// 2. 将求和结果添加到ViewModel列表
objectCounts.Add(new ObjectCountViewModel() { Description = "Total Sum", Count = totalSum });

为什么原来的写法会报错?

如果你之前尝试的代码类似objects.Where(...).Sum(),问题就出在:Where(...)返回的是IEnumerable<YourMainObjectType>(对象集合),而不是数值序列。Sum()没有直接作用于对象集合的重载,所以必须先用Select或SelectMany提取出要计算的decimal字段,生成IEnumerable<decimal>序列后,才能调用Sum()。

额外场景提示

如果你的求和逻辑是每个符合条件的主对象对应一个数值,再对这些数值求和(而非展开ObjectItem求和),代码可以改成:

decimal totalSum = objects
    .Where(e => 
        e.ObjectItems.Any(ep => 
            ep.ObjectItemType.Description.Contains("ItemToCount") && 
            ep.ObjectItemSelctionType.Description.Contains("Taken")
        )
    )
    .Sum(e => e.TotalAmount); // 替换成主对象上的decimal属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:17:28