在 Asp.net C#、MVC、Codefirst 应用程序中使用 LINQ 无法在多对多关系中获得预期结果
Can not get the expected result in many to many relationship using LINQ in Asp.net C#, MVC, Codefirst application
我正在尝试使用 Asp.net C#、MVC、Codefirst 方法开发应用程序。
我有两个 class 演员和电影,它们之间存在多对多关系。 (一个演员可以有很多部电影,一部电影可以有很多演员)
现在我遇到了一个问题,我可以从两个表中检索数据,但不是预期的那样,我相信我的代码逻辑某处出了问题。
例如,我可以从数据库中检索电影列表,当我点击每部电影时,它会将我重定向到属于该特定电影的页面,这在这一点上是有意义的,但现在我想检索在这部电影中扮演角色的演员名单,在这里我失败了。 (我可以检索存在于数据库中的完整演员列表,但不能检索在特定电影中扮演角色的特定演员)。
这些是我的模型:
这是演员Class:
public class Actors
{
public int Id { get; set; }
public string Actor_Name { get; set; }
public string Country { get; set; }
public virtual ICollection<Movies> mvzz { get; set; }
}
这是电影 class:
public class Movies
{
public int Id { get; set; }
public string Movie_title { get; set; }
public string genre { get; set; }
public virtual ICollection<Actors> actzz { get; set; }
}
这是控制器:
public ActionResult Index()
{
var mvz = _context.mvz;
return View(mvz);
}
public ActionResult Details(int? Id)
{
var movies_Detail = _context.mvz.Include(a=> a.actzz).SingleOrDefault(i=> i.Id==Id);
var actors = _context.act.ToList();
var ViewModel = new MoviesActorsViewModel()
{
Movies = movies_Detail,
Actors = actors
};
return View(ViewModel);
}
}
}
这是显示电影列表的索引视图,并且有一个 link 用于单独显示每部电影的详细信息:
@model IEnumerable<mtmmmmmm.Models.Movies>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-bordered table-hover table-responsive">
@foreach (var mvz in Model)
{
<tbody>
<tr>
<td>@mvz.Id</td>
<td>@Html.ActionLink(mvz.Movie_title, "Details","Movies", new { Id = mvz.Id },null)</td>
</tr>
</tbody>
}
这是必须显示每部电影的详细信息的详细信息视图,特别是它必须显示在该特定电影中扮演角色的演员列表。
@model mtmmmmmm.ViewModel.MoviesActorsViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>The list of Actors that has played role in @Model.Movies.Movie_title</h2>
<table class="table table-bordered table-hover table-responsive">
@foreach (var actors in Model.Actors)
{
<tbody>
<tr>
<td>@actors.Id</td>
<td>@actors.Actor_Name</td>
<td>@actors.Country</td>
</tr>
</tbody>
}
最后这是视图模型:
public class MoviesActorsViewModel
{
public List<Actors> Actors { get; set; }
public Movies Movies { get; set; }
public MoviesActorsViewModel()
{
Actors = new List<Actors>();
Movies = new Movies();
}
}
我知道我正在编写的用于检索控制器中参与者列表的 LINQ 逻辑有问题 class。
如果任何在这方面具有专业知识的人正在阅读这篇文章 post,请指导我正确的逻辑,我应该将其用于 LINQ 或任何其他有助于我获得结果的方法。
非常感谢您花时间阅读本文 post。
我认为你需要改变
var actors = _context.act.ToList();
到
var actors = movies_Detail.actzz.ToList();
我正在尝试使用 Asp.net C#、MVC、Codefirst 方法开发应用程序。
我有两个 class 演员和电影,它们之间存在多对多关系。 (一个演员可以有很多部电影,一部电影可以有很多演员)
现在我遇到了一个问题,我可以从两个表中检索数据,但不是预期的那样,我相信我的代码逻辑某处出了问题。
例如,我可以从数据库中检索电影列表,当我点击每部电影时,它会将我重定向到属于该特定电影的页面,这在这一点上是有意义的,但现在我想检索在这部电影中扮演角色的演员名单,在这里我失败了。 (我可以检索存在于数据库中的完整演员列表,但不能检索在特定电影中扮演角色的特定演员)。
这些是我的模型:
这是演员Class:
public class Actors
{
public int Id { get; set; }
public string Actor_Name { get; set; }
public string Country { get; set; }
public virtual ICollection<Movies> mvzz { get; set; }
}
这是电影 class:
public class Movies
{
public int Id { get; set; }
public string Movie_title { get; set; }
public string genre { get; set; }
public virtual ICollection<Actors> actzz { get; set; }
}
这是控制器:
public ActionResult Index()
{
var mvz = _context.mvz;
return View(mvz);
}
public ActionResult Details(int? Id)
{
var movies_Detail = _context.mvz.Include(a=> a.actzz).SingleOrDefault(i=> i.Id==Id);
var actors = _context.act.ToList();
var ViewModel = new MoviesActorsViewModel()
{
Movies = movies_Detail,
Actors = actors
};
return View(ViewModel);
}
}
}
这是显示电影列表的索引视图,并且有一个 link 用于单独显示每部电影的详细信息:
@model IEnumerable<mtmmmmmm.Models.Movies>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-bordered table-hover table-responsive">
@foreach (var mvz in Model)
{
<tbody>
<tr>
<td>@mvz.Id</td>
<td>@Html.ActionLink(mvz.Movie_title, "Details","Movies", new { Id = mvz.Id },null)</td>
</tr>
</tbody>
}
这是必须显示每部电影的详细信息的详细信息视图,特别是它必须显示在该特定电影中扮演角色的演员列表。
@model mtmmmmmm.ViewModel.MoviesActorsViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>The list of Actors that has played role in @Model.Movies.Movie_title</h2>
<table class="table table-bordered table-hover table-responsive">
@foreach (var actors in Model.Actors)
{
<tbody>
<tr>
<td>@actors.Id</td>
<td>@actors.Actor_Name</td>
<td>@actors.Country</td>
</tr>
</tbody>
}
最后这是视图模型:
public class MoviesActorsViewModel
{
public List<Actors> Actors { get; set; }
public Movies Movies { get; set; }
public MoviesActorsViewModel()
{
Actors = new List<Actors>();
Movies = new Movies();
}
}
我知道我正在编写的用于检索控制器中参与者列表的 LINQ 逻辑有问题 class。
如果任何在这方面具有专业知识的人正在阅读这篇文章 post,请指导我正确的逻辑,我应该将其用于 LINQ 或任何其他有助于我获得结果的方法。
非常感谢您花时间阅读本文 post。
我认为你需要改变
var actors = _context.act.ToList();
到
var actors = movies_Detail.actzz.ToList();