[英]Use Linq to filter data from another table
我有一个MovieReviewsDataContext上下文,其中包括一个Movie和Review表。
我想检索前15部电影,这些电影至少有两个评论,并且平均评论要优于平均电影评论。
我能够编写的代码:
var topMovies = movieReviewsDataContext.Movies
.Where(m => m.Reviews.Count > 2)
.Where(m => m.Reviews.Average(r => r.rating) >
movieReviewsDataContext.Reviews.Average(r => r.rating))
.Take(15);
仅检查电影的平均评分是否高于全球平均水平。 如何更改它以将其与所有电影的平均值进行比较?
假设你有一个
Review
实体中的public virtual Movie Movie {get;set;}
属性
如果没有该属性,则可能还有其他内容(例如int MovieId
)可以区分评论的电影,您可以在group by子句中使用它。
var averageOfMovieAverages = movieReviewsDataContext
.GroupBy(x => x.Movie.Id)
//.Where(x => x.Count() > 2) if you need this clause
.Select(x => x.Average(m => m.rating))
.Average();
您可以在查询中使用它(您也可以直接在查询中执行此操作,但是我只是为了便于阅读而创建了一个变量)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.