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

Linq Sum方法报错:无法将IEnumerable转换为Func问题排查

解决LINQ Sum方法的参数错误问题

嘿,我来帮你理清这个问题的根源,以及怎么修复它!

你的代码错误原因

你当前的代码:

int minutes = i.Activities.Sum(i.Activities.Where(x => x.Checked == 'y'));

报错的核心原因是:Sum()方法在这里需要接收一个投影委托(也就是Func<Activity, int>),用来告诉它要从每个Activity对象中提取哪个数值来求和。但你直接把Where()返回的IEnumerable<Activity>(筛选后的活动集合)传给了Sum(),这完全不符合它的参数要求,所以编译器会抛出类型转换错误。

正确的两种写法

写法一:先筛选再求和(更直观)

先通过Where()过滤出Checked为'y'的活动,再用Sum()提取它们的Time属性求和:

int minutes = i.Activities.Where(x => x.Checked == 'y').Sum(x => x.Time);

写法二:直接在Sum中加入条件(更简洁)

你也可以把筛选逻辑直接放到Sum()的投影函数里,符合条件就取Time,不符合就取0(相当于不贡献数值):

int minutes = i.Activities.Sum(x => x.Checked == 'y' ? x.Time : 0);

验证你的示例

对于你给出的三个活动:

  • Activity 1: Time=5,Checked=y
  • Activity 2: Time=5,Checked=n
  • Activity 3: Time=5,Checked=y

两种写法都会计算5+5=10,完全符合你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:28