Asp.net core 如何使用多对多关系表获取相关数据?
我有三张桌子。第一个是Asp.net core 如何使用多对多关系表获取相关数据?,asp.net-core,.net-core,many-to-many,Asp.net Core,.net Core,Many To Many,我有三张桌子。第一个是电影,第二个是类别,第三个是电影类别。我列出了电影,但我想选择一个类别,然后列出每个类别的电影 如何制作控制器?我在下面介绍了我的业务对象、视图和当前控制器 电影实体 public-class电影:人性化 { 公共int Id{get;set;} 公共字符串名称{get;set;} 公共字符串摘要{get;set;} 公共字符串控制器{get;set;} 公共字符串标题{get;set;} 公共ICollection MoviesCategory{get;set;} }
电影
,第二个是类别
,第三个是电影类别
。我列出了电影,但我想选择一个类别,然后列出每个类别的电影
如何制作控制器?我在下面介绍了我的业务对象、视图和当前控制器
电影实体
public-class电影:人性化
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串摘要{get;set;}
公共字符串控制器{get;set;}
公共字符串标题{get;set;}
公共ICollection MoviesCategory{get;set;}
}
类别实体
公共类类别:IEntity
{
公共int Id{get;set;}
公共字符串CategoryName{get;set;}
公共ICollection MoviesCategory{get;set;}
}
电影类别实体
公共类电影类别:电影
{
公共int Id{get;set;}
public int MovieId{get;set;}
public int CategoryId{get;set;}
公共类别{get;set;}
公共电影{get;set;}
}
控制器
public IActionResult List()
{
var movies=_movieService.GetAll();
MovieListViewModel MovieListViewModel=新的MovieListViewModel()
{
电影
};
返回视图(movieListViewModel);
}
看法
@foreach(Model.Movies中的变量项)
{
@Html.HiddenFor(modeleItem=>item.Id)
@DisplayFor(modeleItem=>item.Id)
@DisplayFor(modelItem=>item.Name)
@如果(!string.IsNullOrEmpty(item.Summary)&&item.Summary.Length>35)
{
@(项目摘要.子串(0,35))
}
@DisplayFor(modeleItem=>item.Director)
}
要获得类别
及其相关的电影
请执行以下操作:
创建一个视图模型,用于保存类别
和电影
的数据,以获得强类型视图:
公共类电影数据
{
公共类别{get;set;}
公共IEnumerable电影{get;set;}
}
然后在控制器中查询数据库,如下所示:
public异步任务MovieDataAction(int-catId)
{
var data=等待上下文
.类别
.Where(c=>c.Id==catId)//类别Id
.包括(c=>c.MoviesCategory)
.然后包括(p=>p.Movie)
.Select(cat=>new{Category=cat,Movies=cat.moviescegory.Select(w=>w.Movie)})
.FirstOrDefaultAsync();
var vData=新电影数据(){
类别=数据。类别,
电影=数据。电影
};
返回视图(vData);
}
我根据您的描述制作了一个演示,如下所示:
查看:
@model MovieListViewModel
@{
ViewData["Title"] = "List";
}
<h1>List</h1>
@Html.DropDownListFor(modelItem => modelItem.CategoryId, Model.Categories, "Select Category",
new { @class = "form-control" })
<table>
@foreach (var item in Model.Movies)
{
<tr>
@Html.HiddenFor(modelItem => item.Id)
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@if (!string.IsNullOrEmpty(item.Summary) && item.Summary.Length > 35)
{
<p>@(item.Summary.Substring(0,35))</p>
}
</td>
<td>
@Html.DisplayFor(modelItem => item.Director)
</td>
<td>
<a href="~/Movie/Edit/@item.Id"><i title="Edit" class="fas fa-edit" style="color:coral"></i></a>
<a href="~/Movie/Detail/@item.Id"><i title="Detail" class="fas fa-info-circle" style="color:cornflowerblue"></i></a>
<td>
</tr>
}
</table>
@section scripts{
<script>
$("#CategoryId").on("change", function () {
var id = $(this).val();
window.location.href = "/Movie/List?id=" + id;
})
</script>
}
public IActionResult List(int? id)
{
var movies = _context.Movies.ToList();
var categories = _context.Categories.ToList();
if(id != null)
{
movies = _context.MoviesCategories.Where(c => c.CategoryId == id).Select(m => m.Movie).ToList();
}
MovieListViewModel movieListViewModel = new MovieListViewModel()
{
CategoryId = id ?? 0,
Categories = new List<SelectListItem>(),
Movies = movies
};
foreach(var category in categories)
{
movieListViewModel.Categories.Add(new SelectListItem { Text = category.CategoryName, Value = category.Id.ToString() });
}
return View(movieListViewModel);
}
@model MovieListViewModel
@{
ViewData[“标题”]=“列表”;
}
列表
@DropDownListFor(modelItem=>modelItem.CategoryId,Model.Categories,“选择类别”,
新的{@class=“表单控制”})
@foreach(Model.Movies中的var项)
{
@Html.HiddenFor(modeleItem=>item.Id)
@DisplayFor(modeleItem=>item.Id)
@DisplayFor(modelItem=>item.Name)
@如果(!string.IsNullOrEmpty(item.Summary)&&item.Summary.Length>35)
{
@(项目摘要.子串(0,35))
}
@DisplayFor(modeleItem=>item.Director)
}
@节脚本{
$(“#CategoryId”)。关于(“更改”,函数(){
var id=$(this.val();
window.location.href=“/Movie/List?id=“+id;
})
}
控制器:
@model MovieListViewModel
@{
ViewData["Title"] = "List";
}
<h1>List</h1>
@Html.DropDownListFor(modelItem => modelItem.CategoryId, Model.Categories, "Select Category",
new { @class = "form-control" })
<table>
@foreach (var item in Model.Movies)
{
<tr>
@Html.HiddenFor(modelItem => item.Id)
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@if (!string.IsNullOrEmpty(item.Summary) && item.Summary.Length > 35)
{
<p>@(item.Summary.Substring(0,35))</p>
}
</td>
<td>
@Html.DisplayFor(modelItem => item.Director)
</td>
<td>
<a href="~/Movie/Edit/@item.Id"><i title="Edit" class="fas fa-edit" style="color:coral"></i></a>
<a href="~/Movie/Detail/@item.Id"><i title="Detail" class="fas fa-info-circle" style="color:cornflowerblue"></i></a>
<td>
</tr>
}
</table>
@section scripts{
<script>
$("#CategoryId").on("change", function () {
var id = $(this).val();
window.location.href = "/Movie/List?id=" + id;
})
</script>
}
public IActionResult List(int? id)
{
var movies = _context.Movies.ToList();
var categories = _context.Categories.ToList();
if(id != null)
{
movies = _context.MoviesCategories.Where(c => c.CategoryId == id).Select(m => m.Movie).ToList();
}
MovieListViewModel movieListViewModel = new MovieListViewModel()
{
CategoryId = id ?? 0,
Categories = new List<SelectListItem>(),
Movies = movies
};
foreach(var category in categories)
{
movieListViewModel.Categories.Add(new SelectListItem { Text = category.CategoryName, Value = category.Id.ToString() });
}
return View(movieListViewModel);
}
public IActionResult列表(int?id)
{
var movies=_context.movies.ToList();
var categories=_context.categories.ToList();
如果(id!=null)
{
movies=\u context.moviescegories.Where(c=>c.CategoryId==id)。选择(m=>m.Movie.ToList();
}
MovieListViewModel MovieListViewModel=新的MovieListViewModel()
{
CategoryId=id±0,
类别=新列表(),
电影
};
foreach(类别中的var类别)
{
movieListViewModel.Categories.Add(新建SelectListItem{Text=category.CategoryName,Value=category.Id.ToString()});
}
返回视图(movieListViewModel);
}
结果:
@model MovieListViewModel
@{
ViewData["Title"] = "List";
}
<h1>List</h1>
@Html.DropDownListFor(modelItem => modelItem.CategoryId, Model.Categories, "Select Category",
new { @class = "form-control" })
<table>
@foreach (var item in Model.Movies)
{
<tr>
@Html.HiddenFor(modelItem => item.Id)
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@if (!string.IsNullOrEmpty(item.Summary) && item.Summary.Length > 35)
{
<p>@(item.Summary.Substring(0,35))</p>
}
</td>
<td>
@Html.DisplayFor(modelItem => item.Director)
</td>
<td>
<a href="~/Movie/Edit/@item.Id"><i title="Edit" class="fas fa-edit" style="color:coral"></i></a>
<a href="~/Movie/Detail/@item.Id"><i title="Detail" class="fas fa-info-circle" style="color:cornflowerblue"></i></a>
<td>
</tr>
}
</table>
@section scripts{
<script>
$("#CategoryId").on("change", function () {
var id = $(this).val();
window.location.href = "/Movie/List?id=" + id;
})
</script>
}
public IActionResult List(int? id)
{
var movies = _context.Movies.ToList();
var categories = _context.Categories.ToList();
if(id != null)
{
movies = _context.MoviesCategories.Where(c => c.CategoryId == id).Select(m => m.Movie).ToList();
}
MovieListViewModel movieListViewModel = new MovieListViewModel()
{
CategoryId = id ?? 0,
Categories = new List<SelectListItem>(),
Movies = movies
};
foreach(var category in categories)
{
movieListViewModel.Categories.Add(new SelectListItem { Text = category.CategoryName, Value = category.Id.ToString() });
}
return View(movieListViewModel);
}