LINQ分组内计算Yes占比:Average方法参数错误排查
LINQ GroupBy分组内计算Yes/No占比的编译错误解决
我希望在LINQ的GroupBy分组内计算Answer字段Yes/No的占比,尝试统计Yes和No的数量并将结果设为PercentYes,但编写的代码出现编译错误。
错误代码:
PercentYes = g.Average(g.Where(f => f.Answer == "Yes").Count(),g.Where(f => f.Answer == "No").Count())
错误信息:
编译错误 (第41行,第20列): 没有接受2个参数的方法'Average'重载
解决方法
问题核心是Average方法没有接受两个参数的重载,你需要计算Yes数量在分组总数量中的占比,而非直接传入两个计数参数给Average。
推荐两种写法:
- 直接计算Yes数量除以分组总数:
PercentYes = (double)g.Count(f => f.Answer == "Yes") / g.Count()
这里强制转成double是为了避免整数除法导致结果仅为0或1。
- 更高效的单遍历写法:
PercentYes = g.Average(f => f.Answer == "Yes" ? 1.0 : 0.0)
这种方式只需要遍历分组一次,将Yes元素标记为1.0,No标记为0.0,求平均值就是Yes的占比,性能更优。
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

