Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据平均c#linq延迟加载获得前5项记录_C#_Entity Framework_Linq_Lazy Loading - Fatal编程技术网

根据平均c#linq延迟加载获得前5项记录

根据平均c#linq延迟加载获得前5项记录,c#,entity-framework,linq,lazy-loading,C#,Entity Framework,Linq,Lazy Loading,我想根据这部电影的平均收视率来获得前五名 我有以下几点, 电影公司 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 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; }
    }
这是整个电影表的平均值。我想要得到的是这个SQL查询的linq等价物

select top 5 MovieId, avg(Rating) as AverageRating
from MovieRatings
group by MovieId
order by AverageRating desc

任何帮助都将不胜感激。谢谢

看起来您想要选择
电影
实体,因此您可以在
OrderByDescending
方法中取评分的平均值:

var query = _context.Movies
              .OrderByDescending(m => m.MovieRatings.Average(r => r.Rating))
              .Take(5);

但是,对于要执行以下操作的SQL:

  • 分组依据
    MovieId
  • 选择
    MovieId
    Average rating
  • 降序排列
  • 返回所需的结果数
  • 此查询将复制您的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);
    


    看起来您想要选择
    电影
    实体,因此您可以在
    OrderByDescending
    方法中取评分的平均值:

    var query = _context.Movies
                  .OrderByDescending(m => m.MovieRatings.Average(r => r.Rating))
                  .Take(5);
    

    但是,对于要执行以下操作的SQL:

  • 分组依据
    MovieId
  • 选择
    MovieId
    Average rating
  • 降序排列
  • 返回所需的结果数
  • 此查询将复制您的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);
    

    如果“OrderByDescending()”不可用,请首先转换到列表:

    如果“OrderByDescending()”不可用,请首先转换到列表:


    嗨@haldo,可以选择电影实体吗?嗨@haldo,可以选择电影实体吗?几乎正确。只是缺少了几乎正确的.Average()。只是错过了.Average()
    var movieList = await _context.MovieRatings.ToList();
    var result = movieList.OrderByDescending(x => x.Rating).Take(5);