【发布时间】:2014-06-09 14:05:27
【问题描述】:
我有一个 ViewModel,我目前返回一个查询,如果电影有员工并且他们有角色,那么该电影、演员和角色都会全部返回。
现在我想为此添加一个额外的查询,该查询使同一部电影中的所有员工成为string(或任何最有效的方法)。因此,如果三个人在同一部电影中,我想要一个他们的列表,以便我可以在我的视图中调用它。
我当前的查询/控制器是
var parameter = Int32.Parse(Filter);
var queryString =
from m in db.Movies
join me in db.MovieEmployees
on m.ID equals me.movieID
join e in db.Employees
on me.employeeID equals e.ID
join r in db.Roles
on me.roleID equals r.ID
where (parameter == 1 && m.Name.Contains(searchString)) ||
(parameter == 2 && e.Name.Contains(searchString)) ||
(parameter == 3 && r.RoleType.Contains(searchString))
select new StarringViewModel { employeeID = e.ID, movieID = m.ID, roleID = r.ID,
movieName = m.Name, movieDescription = m.Description,
movieReleaseDate = m.ReleaseDate, employeeBirthdate = e.Birthday,
employeeName = e.Name, Role = r.RoleType };
return View(queryString.Distinct().ToList().OrderBy(x => x.movieName));
它看起来像这样
看看我如何在“有史以来最伟大的电影”中有两个员工,我想在电影下方的“主演”字段中返回那个员工列表 (employeeList)
作为参考,这是我的模型、视图模型和数据库布局。
型号
public class StarringViewModel
{
public int movieID { get; set; }
public int roleID { get; set; }
public int employeeID { get; set; }
public string movieName { get; set; }
public string movieDescription { get; set; }
public DateTime? movieReleaseDate { get; set; }
public string Role { get; set; }
public string employeeName { get; set; }
public DateTime employeeBirthdate { get; set; }
public string employeeList { get; set; } // <-- I want this to be the list of actors in same movies
}
查看
<table class="table table-striped table-hover table-responsive table-condensed">
<tr>
<th>
<h3 style="font-size: x-large; font-weight: bolder">Movie Name</h3>
</th>
<th>
<h3 style="font-size: x-large; font-weight: bolder">Release Date</h3>
</th>
<th>
<h3 style="font-size: x-large; font-weight: bolder">Employee</h3>
</th>
<th>
<h3 style="font-size: x-large; font-weight: bolder">@Html.DisplayNameFor(model => model.Role)</h3>
</th>
<th>
@using (Html.BeginForm("Index", "Starring"))
{
<div class="dropdown">
<select class="btn btn-group-lg btn-default col-md-4" style="margin-top: 15px; height: 36px; opacity: 1" data-toggle="dropdown" name="Filter">
<option value="0" disabled selected>Filter By...</option>
<option value="1">Movie Name</option>
<option value="2">Actor Name</option>
<option value="3">Role</option>
</select>
</div>
<input type="text" name="searchString" class="col-md-6" style="margin-top: 16px; text-align:center; height:35px; font-size:20px" placeholder="enter text" />
<button type="submit" class="btn btn-group-lg btn-primary col-md-2 glyphicon glyphicon-arrow-right" style="margin-top: 15px; height:36px; opacity:1" value="" />
}
</th>
@foreach (var item in Model)
{
<tr>
<td class="col-md-2">
<span style="font-size: 17px;">@Html.DisplayFor(modelItem => item.movieName)</span>
</td>
<td class="col-md-2">
<span style="font-size: 17px;">@Html.DisplayFor(modelItem => item.movieReleaseDate)</span>
</td>
<td class="col-md-1">
<span style="font-size: 17px;">@Html.DisplayFor(modelItem => item.employeeName)</span>
</td>
<td class="col-md-1">
<span style="font-size: 17px;">@Html.DisplayFor(modelItem => item.Role)</span>
</td>
<td class="col-md-3 col-md-offset-3">
</td>
</tr>
<tr>
<td colspan="12">
<p style="font-size: 17px; font-style: italic; font-family: 'Roboto', sans-serif">
Movie ID: @Html.DisplayFor(modelItem => item.movieID)
<br />
Description: @Html.DisplayFor(modelItem => item.movieDescription)
<br />
Starring: // ADD LIST OF EMPLOYEES HERE (item.employeeList)
</p>
</td>
</tr>
}
</table>
图表
如果需要任何其他信息,请告诉我。
谢谢!
【问题讨论】:
-
StarringViewModel中的employeeName和employeeList有什么区别?视图模型具有与MovieEmployees相同的多重性,但employeeList具有Movie的多重性。所以看起来每部电影需要一个视图模型,但是,如何为每部电影选择一个employeeName? -
每个员工都可以有一个角色并出现在电影中。但这些关系是一对一的。如果该员工有两个角色,他们实际上在数据库中有两个实例。但是对于这种情况,假设我在一部名为“SO”的电影中有 6 名员工。现在,表格将打印六行,每个员工(及其角色)在电影标题中使用同一部电影。所以我希望能够收集每个员工的列表/字符串/任何类似的电影。所以电影“SO”中的每个人,电影“SO2”中的每个人,依此类推,这样我就可以调用该变量并将其显示在我的视图中。这有意义吗?
标签: sql linq asp.net-mvc-5