繁体   English   中英

使用Linq过滤另一个表中的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM