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