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

在LINQ的Sum方法中添加条件报错,如何正确实现该功能?

在Sum中添加条件的正确实现

你的代码报错是因为Sum方法要求委托返回数值类型(如int、decimal),但你写的i.VFApprovedFinalEffort && i.SpecialRates=="test"返回的是布尔值(bool),不符合Sum的参数要求。

下面是两种可行的修正方案:

方案1:先过滤再聚合

先通过Where筛选出满足条件的元素,再根据需求选择Count(统计数量)或Sum(求和字段值):

统计符合条件的元素数量

var vfgrandtotal = issues.Count(i => i.VFApprovedFinalEffort && i.SpecialRates == "test");

对符合条件的元素的VFApprovedFinalEffort字段求和

var vfgrandtotal = issues.Where(i => i.VFApprovedFinalEffort && i.SpecialRates == "test")
                         .Sum(i => i.VFApprovedFinalEffort);

方案2:在Sum中转换为数值

用三元表达式把布尔条件转为数值,符合条件返回目标值(或1用于计数),不符合返回0:

统计符合条件的元素数量

var vfgrandtotal = issues.Sum(i => (i.VFApprovedFinalEffort && i.SpecialRates == "test") ? 1 : 0);

对符合条件的元素的VFApprovedFinalEffort字段求和

var vfgrandtotal = issues.Sum(i => (i.VFApprovedFinalEffort && i.SpecialRates == "test") ? i.VFApprovedFinalEffort : 0);

完整示例代码

假设你需要统计符合条件的元素数量,修正后的完整代码如下:

private async Task<CapabilityUtilizationPagedResultDto> GetCount(IEnumerable<CapabilityUtilizationDto> issues)
{
    var vfgrandtotal = issues.Count(i => i.VFApprovedFinalEffort && i.SpecialRates == "test");
    var vfmd = vfgrandtotal / 19;
    return new CapabilityUtilizationPagedResultDto
    {
        VFGrandTotal = vfgrandtotal,
        VFMd = vfmd
    };
}

如果VFApprovedFinalEffort是数值类型(如decimal),需要求和该字段的值,代码如下:

private async Task<CapabilityUtilizationPagedResultDto> GetCount(IEnumerable<CapabilityUtilizationDto> issues)
{
    var vfgrandtotal = issues.Where(i => i.SpecialRates == "test")
                             .Sum(i => i.VFApprovedFinalEffort);
    var vfmd = vfgrandtotal / 19;
    return new CapabilityUtilizationPagedResultDto
    {
        VFGrandTotal = vfgrandtotal,
        VFMd = vfmd
    };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:55:19