【发布时间】:2017-01-06 14:34:56
【问题描述】:
我正在尝试使用 Linq 编写一个查询,以计算用户的电影类型(该特定用户观看次数最多)该类型电影的平均排名(排名在不同的表中,并且由许多用户给出,我需要计算该类型中每部电影的平均排名)。
我现在的代码是这样的:
var extractMoviesAndTheirGenre =
from item in results join second in database.MovieGenres on item.movieId equals second.movieId
where item.movieId.Equals(second.movieId)
select new
{
MovieId = item.movieId,
GenreName = second.Genre.genreName,
GenreId = second.genreId
};
var extractGenreNeeded =
from item in extractMoviesAndTheirGenre
group item by new
{
GenreName = item.GenreName,
GenreId = item.GenreId
}
into grouped
select new
{
GenreId = grouped.Key.GenreId,
GenreName = grouped.Key.GenreName,
CountGenre = grouped.Count(x => x.GenreId == grouped.Key.GenreId),
};
extractGenreNeeded = (extractGenreNeeded.OrderByDescending(x => x.CountGenre).Take(1));
var GenreId = extractGenreNeeded.FirstOrDefault().GenreId.ToString();
var extractMoviesInFoundGenre =
from item in extractGenreNeeded
join second in database.MovieGenres on item.GenreId equals second.genreId
where second.genreId.Equals(GenreId)
select new
{
MovieId = second.movieId
};
var extractingMoviesInGenreAndTheirAvarageRank =
from item in extractMoviesInFoundGenre
join second in database.UserMovieRanks on item.MovieId equals second.movieId
select new
{
MovieId = item.MovieId,
Rank = second.movieRank
};
如您所见,我能够为用户隔离最受关注的类型(我得到该用户观看的电影列表作为查询的输入,此输入被命名为 IQueryable 类型的结果)我无法计算该类型的每部电影的平均得分...
谢谢,
【问题讨论】:
-
你为什么不给你的变量一个有意义的名字呢?您和我们都更容易理解您的代码。
-
你可能会看到Get Average Using LINQ
-
为了您的方便,我编辑了我的代码......丹尼尔我读了它,它对我没有用,因为它不是我的情况..
-
如果不是纯 SQL,你怎么会没有。从那里开始并向后工作。
-
在 SQL 中,我只会在 Have 子句或其他内容中对该列进行平均...我这里没有.. 帮助将不胜感激...我不会问如果我知道如何用 LINQ 做到这一点......