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

Linq计算电影平均评分遇除零错误,如何解决?

解决Linq计算电影平均评分时的除零错误问题

嘿,这个问题我之前也碰到过!当某部电影没有任何评分记录时,你的代码里的Count()会返回0,直接触发除零错误,确实挺头疼的。不过有几个简单的办法可以解决这个问题,还能顺便优化代码的性能:

方法一:先缓存评论集合,再判断计算

这种方法的好处是只遍历一次评论集合(避免你原来代码里两次Where的重复遍历),同时明确处理无评分的情况:

// 先获取当前电影的所有评论,缓存起来
var movieReviews = reviews.Where(w => w.MovieID == m.MovieID).ToList();

// 如果有评论就计算平均值,否则返回默认值(比如0,你也可以改成null或者其他符合业务逻辑的值)
var averageRating = movieReviews.Any() 
    ? movieReviews.Average(r => r.MovieRating) 
    : 0;

方法二:利用可空类型的Average特性

Linq的Average方法在处理空的可空数值序列时,会返回null而不是抛出异常。我们可以把评分转成可空类型,再结合空合并运算符设置默认值:

var averageRating = reviews
    .Where(w => w.MovieID == m.MovieID)
    .Select(r => (double?)r.MovieRating) // 将评分转为可空double
    .Average() // 空序列时返回null
    ?? 0; // 如果是null,就用0作为默认值

为什么你的原代码会出错?

你原来的代码两次调用Where来分别计算总和和数量,不仅会遍历两次集合(浪费性能),更关键的是当没有评论时,Count()返回0,直接触发DivideByZeroException。上面的两种方法都避免了这个问题,同时优化了查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:05:51