根据平均 c# linq 延迟加载获取前 5 条记录
Get top 5 records based on average c# linq lazy loading
我正在尝试根据电影的平均评分获得前 5 名的记录。
我有以下内容,
Movie.Cs
public class Movie
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string YearOfRelease { get; set; }
public int RunningTime { get; set; }
public virtual ICollection<MovieGenre> MovieGenres { get; set; }
public virtual ICollection<MovieRating> MovieRatings { get; set; }
}
MovieRating.cs
public class MovieRating
{
[Key]
public int Id { get; set; }
public virtual Movie Movie { get; set; }
public virtual AppUser AppUser { get; set; }
public int Rating { get; set; }
}
var queryable = await _context.MovieRatings.AverageAsync(x => x.Rating);
这给了我整个 MovieRatings 的平均值 table。我想要得到的是这个 SQL Query
的 linq 等价物
select top 5 MovieId, avg(Rating) as AverageRating
from MovieRatings
group by MovieId
order by AverageRating desc
任何帮助将不胜感激。谢谢
您似乎想要 select Movie
实体,因此您可以在 OrderByDescending
方法中取平均评分:
var query = _context.Movies
.OrderByDescending(m => m.MovieRatings.Average(r => r.Rating))
.Take(5);
但是,对于 SQL 你想要:
- 分组依据
MovieId
- Select
MovieId
和 Average rating
- 按评分降序排列
- Return 您需要的结果数
此查询将复制您的 SQL:
var queryable = _context.MovieRatings
.GroupBy(m => m.Id)
.Select(g => new { MovieId = g.Key, AverageRating = g.Average(s => s.Rating)})
.OrderByDescending(m => m.AverageRating)
.Take(5);
var queryable = await _context.MovieRatings.OrderByDescending(x => x.Rating).Take(5);
如果“OrderByDescending()”不可用,首先转换为 List<>:
var movieList = await _context.MovieRatings.ToList();
var result = movieList.OrderByDescending(x => x.Rating).Take(5);
我正在尝试根据电影的平均评分获得前 5 名的记录。
我有以下内容,
Movie.Cs
public class Movie
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string YearOfRelease { get; set; }
public int RunningTime { get; set; }
public virtual ICollection<MovieGenre> MovieGenres { get; set; }
public virtual ICollection<MovieRating> MovieRatings { get; set; }
}
MovieRating.cs
public class MovieRating
{
[Key]
public int Id { get; set; }
public virtual Movie Movie { get; set; }
public virtual AppUser AppUser { get; set; }
public int Rating { get; set; }
}
var queryable = await _context.MovieRatings.AverageAsync(x => x.Rating);
这给了我整个 MovieRatings 的平均值 table。我想要得到的是这个 SQL Query
的 linq 等价物select top 5 MovieId, avg(Rating) as AverageRating
from MovieRatings
group by MovieId
order by AverageRating desc
任何帮助将不胜感激。谢谢
您似乎想要 select Movie
实体,因此您可以在 OrderByDescending
方法中取平均评分:
var query = _context.Movies
.OrderByDescending(m => m.MovieRatings.Average(r => r.Rating))
.Take(5);
但是,对于 SQL 你想要:
- 分组依据
MovieId
- Select
MovieId
和Average rating
- 按评分降序排列
- Return 您需要的结果数
此查询将复制您的 SQL:
var queryable = _context.MovieRatings
.GroupBy(m => m.Id)
.Select(g => new { MovieId = g.Key, AverageRating = g.Average(s => s.Rating)})
.OrderByDescending(m => m.AverageRating)
.Take(5);
var queryable = await _context.MovieRatings.OrderByDescending(x => x.Rating).Take(5);
如果“OrderByDescending()”不可用,首先转换为 List<>:
var movieList = await _context.MovieRatings.ToList();
var result = movieList.OrderByDescending(x => x.Rating).Take(5);