Linq to Entities Group By 有一些没有元素的组

Posted

技术标签:

【中文标题】Linq to Entities Group By 有一些没有元素的组【英文标题】:Linq to Entities Group By where there are some groups with no elements 【发布时间】:2019-08-09 00:48:34 【问题描述】:

模型类:

public class Video

    public int Id  get; set; 
    public string Name  get; set; 
    public DateTime ReleasedDate  get; set; 
    public byte GenreId  get; set; 
    public Genre Genre  get; set; 
    public Classification Classification  get; set; 
    public IList<Tag> Tags  get; set; 


public class Genre

    public byte Id  get; set; 
    public string Name  get; set; 
    public IList<Video> Videos  get; set; 

例如类型名称是:动作、戏剧、喜剧和恐怖。 没有喜剧和恐怖类型的视频。

查看模型类:

public class CountOfVideos

    public string Classification  get; set; 
    public int NumberOfMovies  get; set; 

控制器类:

 public ActionResult Movies()
    
        var movies = _context.Videos
            .GroupBy(v => v.Genre.Name)
            .Select(g => new CountOfVideos  Classification = g.Key, NumberOfMovies = g.Count() )
            .ToList();

        return View(movies);
    

查看:

@model IEnumerable<LinqTest.ViewModels.CountOfVideos>

<table class="table table-bordered table-hover">
<thead>
    <tr>
        <th>Name</th>
        <th>Count</th>
    </tr>
</thead>
<tbody>
    @foreach (var movie in Model)
    
        <tr>
            <td>@movie.Classification</td>
            <td>@movie.NumberOfMovies</td>
        </tr>
    
</tbody>

代码可以正常工作,但不会显示其中没有视频的类型的名称。 View 生成如下内容:

动作 23 戏剧 15 但我想生成动作 23 戏剧 15 喜剧 0 恐怖 0。

【问题讨论】:

【参考方案1】:

您应该从包含所需基础数据的集合开始。在这种情况下:流派。

类似:

 public ActionResult Movies() 
  var genres = _context.Genres
   .Select(g => new CountOfVideos 
    Classification = g.Name, NumberOfMovies = g.Videos.Count()
   )
   .OrderBy(c => c.NumberOfMovies)
   .ToList();

  return View(genres);
 

【讨论】:

是的,谢谢。它是如此容易。我根本没有考虑过这种方法,因为我需要使用 group by。

以上是关于Linq to Entities Group By 有一些没有元素的组的主要内容,如果未能解决你的问题,请参考以下文章

LINQ-Entities Group By With Range 变量查询

LINQ to SQL 实现 GROUP BY聚合ORDER BY

C# Linq to SQL — Group by

Linq to Entity Group By error 无法翻译

LINQ to SQL语句之Group By/Having

LINQ to Sql 左外连接与 Group By 和 Have 子句