添加其他查询以返回(查看) [英] Adding additional query to return(View)
问题描述
我有一个 ViewModel ,并且我当前返回一个查询,其中如果电影有雇员并且他们有一个角色,则该电影,演员和角色都将返回. /p>
现在,我想对此添加一个附加查询,以使同一部电影中的所有员工都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
)
作为参考,这是我的模型,ViewModel和数据库布局.
模型
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>
图
如果需要任何其他信息,请告诉我.
谢谢!
我认为您应该在视图模型中添加属性IEnumerable<string> employeeNames
.
var query =
from m in db.Movies
from me in m.MovieEmployees
where (parameter == 1 && m.Name.Contains(searchString)) ||
(parameter == 2 && me.Employee.Name.Contains(searchString)) ||
(parameter == 3 && me.Role.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 = me.Employee.Birthday,
employeeName = me.Employee.Name, Role = me.Role.RoleType,
employeeNames = m.MovieEmployees
.Selext(x => x.Employee.Name)
};
(顺便说一句,请注意,我使用导航属性而不是联接).
您可以通过串联员工来显示他们:
string.Join(", ", employeeNames)
在视图中或视图模型中的EmployeeNamesString
之类的属性中.
在视图模型中如何执行此操作的示例:
public string EmployeeNamesString
{
get { return string.Join(", ", this.employeeNames); }
}
并在视图中显示EmployeeNamesString
.
I have a ViewModel and I currently return a query where if the movie has employees and they have a role then that movie, actor(s), and role(s) are all returned.
Now I want to add an additional query to this that makes a string
(or whatever works best) of all the employees within the same movie. So if three people were in the same movie, I want a list of them so that I can call it in my View.
My current query/Controller is
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));
And it looks like this
See how I have two employees in "The Greatest Movie Ever", I want to return that list of employees (employeeList
) within the "Starring" field I have below the movies
For reference, here is my Model, ViewModel, and DB layout.
Model
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
}
View
<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>
Diagram
If any additional information is needed please let me know.
Thank you!
I think you should add a property IEnumerable<string> employeeNames
to the view model.
var query =
from m in db.Movies
from me in m.MovieEmployees
where (parameter == 1 && m.Name.Contains(searchString)) ||
(parameter == 2 && me.Employee.Name.Contains(searchString)) ||
(parameter == 3 && me.Role.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 = me.Employee.Birthday,
employeeName = me.Employee.Name, Role = me.Role.RoleType,
employeeNames = m.MovieEmployees
.Selext(x => x.Employee.Name)
};
(Notice, by the way, that I use navigation properties rather than joins).
You can show the employees by concatenating them:
string.Join(", ", employeeNames)
either in the view, or in a property like EmployeeNamesString
in the view model.
An example of how to do it in the view model:
public string EmployeeNamesString
{
get { return string.Join(", ", this.employeeNames); }
}
and display EmployeeNamesString
in the view.
这篇关于添加其他查询以返回(查看)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!