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>&nbsp;
                <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>&nbsp;
                <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>&nbsp;
                <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);
}