Linq to Sql Left join ang得到平均值

时间:2017-04-25 13:26:06

标签: linq

我们说我有一个Linq查询:

var query = from course in _unitOfWork.Course.GetAll() 
            join candidate in _unitOfWork.CandidateCourses.GetAll() on course.Id equals candidate.Course_id join cr in _unitOfWork.CourseReviews.GetAll() on course.Id equals cr.Course_id into g from rt in g.DefaultIfEmpty() 
            where candidate.UserId == CandidateId 
            select new CourseFields { Id = course.Id, 
                                      Course_name = course.Course_name, 
                                      Course_description = course.Course_description,
                                      Rating = g.Average(x => x.Rating), 
                                      TotalSections = sections.Count(), };

这里我在计算平均评分时遇到异常,当表格中没有该特定课程的数据时。

有人可以帮助我做错了吗?

2 个答案:

答案 0 :(得分:0)

Average需要列表中的一个元素。

如果没有元素,您可以添加DefaultIfEmpty来设置默认评级。

...
Rating = g.DefaultIfEmpty(0).Average(x => x.Rating),
...

如果您的评分为Nullable类型(例如Nullable<double>>) 然后它不会抛出异常,而是重新启动null而不是

答案 1 :(得分:0)

你也可以试试这个。在做一个平均值之前检查null ...

Rating = (g!=null && g.Count()>0)?g.Average(x => x.Rating):0,

...