C# 用Linq计算平均值
我正在尝试使用Linq编写一个查询,以计算某个用户(该特定用户观看率最高)的电影类型的平均排名(排名位于不同的表中,由许多用户给出,我需要计算该类型中每部电影的平均排名) 我的计划是: 我现在的代码是:C# 用Linq计算平均值,c#,linq,average,C#,Linq,Average,我正在尝试使用Linq编写一个查询,以计算某个用户(该特定用户观看率最高)的电影类型的平均排名(排名位于不同的表中,由许多用户给出,我需要计算该类型中每部电影的平均排名) 我的计划是: 我现在的代码是: var extractMoviesAndTheirGenre = from item in results join second in database.MovieGenres on item.movieId equals second.mov
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类型的结果),我无法计算该类型中每部电影的平均分数
谢谢,您已经有了每部电影的排名,所以在您的代码之后
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
};
在本例中,应使用lambda表达式获得平均值:
double avg = extractingMoviesInGenreAndTheirAvarageRank.Average(x => x.Rank);
此外,如果您只想要每个用户的平均值,而不关心MovieId
,那么您可以在第一次查询中完成所有操作:
var extractingMoviesInGenreAndTheirAvarageRank =
(from item in extractMoviesInFoundGenre
join second in database.UserMovieRanks on item.MovieId equals second.movieId
select second.movieRank).Average();
你已经有了每部电影的排名,所以在你的代码之后
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
};
在本例中,应使用lambda表达式获得平均值:
double avg = extractingMoviesInGenreAndTheirAvarageRank.Average(x => x.Rank);
此外,如果您只想要每个用户的平均值,而不关心MovieId
,那么您可以在第一次查询中完成所有操作:
var extractingMoviesInGenreAndTheirAvarageRank =
(from item in extractMoviesInFoundGenre
join second in database.UserMovieRanks on item.MovieId equals second.movieId
select second.movieRank).Average();
为什么不给变量起个有意义的名字呢?这将使您和我们更容易理解您的代码。您可能会看到,为了方便您,我编辑了我的代码。。。Daniel我读了它,但它对我没有用,因为它不是我的案子..你怎么会没有这个我是纯SQL的。在SQL中,我会在Having子句中的那一列上加一个平均值,或者其他什么。。。我这里没有。。我们将不胜感激。。。我不想问我是否知道如何使用LINQ实现这一点……为什么不给变量起个有意义的名字呢?这将使您和我们更容易理解您的代码。您可能会看到,为了方便您,我编辑了我的代码。。。Daniel我读了它,但它对我没有用,因为它不是我的案子..你怎么会没有这个我是纯SQL的。在SQL中,我会在Having子句中的那一列上加一个平均值,或者其他什么。。。我这里没有。。我们将不胜感激。。。我不想问我是否有一个线索如何与林克做到这一点。。。