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

时间:2014-07-23 09:23:39

标签: c# sql linq

我有一个MovieReviewsDataContext上下文,其中包含一个Movie and 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);

仅检查电影的平均评分是否高于全球平均水平。如何更改它以将其与所有电影的平均值进行比较'平均?

1 个答案:

答案 0 :(得分:0)

假设你有

public virtual Movie Movie {get;set;}实体

中的

Review属性

如果您没有该属性,则可能还有其他东西(例如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();

您可以在查询中使用(您也可以直接在查询中执行此操作,但我只是为了可读性而创建了一个变量)。