Sql 添加要返回的附加查询(视图)

Sql 添加要返回的附加查询(视图),sql,linq,asp.net-mvc-5,Sql,Linq,Asp.net Mvc 5,我有一个ViewModel,我当前返回一个查询,如果电影中有员工,他们有一个角色,那么该电影、演员和角色都将返回 现在,我想在此添加一个额外的查询,该查询生成同一部电影中所有员工的字符串(或任何最有效的查询)。因此,如果三个人在同一部电影中,我想要一个他们的列表,以便我可以在我的视图中调用它 我当前的查询/控制器为 var parameter = Int32.Parse(Filter); var queryString = from m in db

我有一个ViewModel,我当前返回一个查询,如果电影中有员工,他们有一个角色,那么该电影、演员和角色都将返回

现在,我想在此添加一个额外的查询,该查询生成同一部电影中所有员工的
字符串(或任何最有效的查询)。因此,如果三个人在同一部电影中,我想要一个他们的列表,以便我可以在我的视图中调用它

我当前的查询/控制器

        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和DB布局,仅供参考

型号

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
    }
公共类StarringViewModel
{
public int movieID{get;set;}
public int roleID{get;set;}
public int employeeID{get;set;}
公共字符串movieName{get;set;}
公共字符串movieDescription{get;set;}
公共日期时间?movieReleaseDate{get;set;}
公共字符串角色{get;set;}
公共字符串employeeName{get;set;}
public DateTime employeeBirthdate{get;set;}
公共字符串employeeList{get;set;}//model.Role)
@使用(Html.BeginForm(“Index”,“Starring”))
{
按…筛选。。。
电影名称
演员名
角色
}
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.movieName)
@DisplayFor(modeleItem=>item.movieReleaseDate)
@DisplayFor(modelItem=>item.employeeName)
@DisplayFor(modelItem=>item.Role)

电影ID:@Html.DisplayFor(modelItem=>item.movieID)
Description:@Html.DisplayFor(modeleItem=>item.movieDescription)
星号://在此添加员工列表(item.employeeList)

}
图表

如果需要任何其他信息,请让我知道


谢谢!

我认为您应该在视图模型中添加属性
IEnumerable employeeNames

var查询=
从我在db.Movies
从我在m.MovieEmployees的
其中(参数==1&&m.Name.Contains(搜索字符串))|
(参数==2&&me.Employee.Name.Contains(搜索字符串))||
(参数==3&&me.Role.RoleType.Contains(搜索字符串))
选择新的StarringViewModel
{ 
雇员ID=e.ID,
电影ID=m.ID,角色ID=r.ID,
movieName=m.Name,
电影描述=m.描述,
movieReleaseDate=m.ReleaseDate,
employeeBirthdate=me.Employee.birthdate,
employeeName=me.Employee.Name,Role=me.Role.RoleType,
employeeNames=m.MovieEmployees
.Selext(x=>x.Employee.Name)
};
(顺便说一句,请注意,我使用的是导航属性而不是连接)

您可以通过连接员工来显示他们:

string.Join(“,”,employeeNames)
在视图中,或在视图模型中的属性(如
EmployeeNamesString
)中

如何在视图模型中执行此操作的示例:

公共字符串EmployeeNamesString
{
获取{return string.Join(“,”,this.employeeNames);}
}

并在视图中显示
employeeName字符串。

StarringViewModel
employeeName
employeeList
之间有什么区别?视图模型与
MovieEmployees
具有相同的多重性,但
employeeList
Movie
具有相同的多重性。因此,您似乎需要一个查看每部电影的模型,但是,如何为每部电影选择一个
employeeName
?每个员工都可以有一个角色并在电影中。但是这些关系是1对1。如果该员工有两个角色,那么他们在DB中实际上有两个实例。但是对于这个场景,假设我在一部名为“SO”的电影中有6名员工。现在,该表将打印六行,一行用于电影标题中具有相同电影的每个员工(及其角色)。因此,我希望能够收集具有类似电影的每个员工的列表/字符串/任何内容。因此,电影“So”中的每个人,以及电影“SO2”中的每个人,等等,这样我可以调用该变量并在视图中显示它。这有意义吗?太棒了!我仍然对如何实现
字符串.Join(“,”,employeeNames)
有些困惑。但是,我目前调用
@Html.DisplayFor(modelItem=>item.employeeNames)
返回名称,但全部为一个无空格字符串。如何实现字符串格式?谢谢!请查看添加内容。您好!很抱歉再次打扰您,但我是C#新手,我不确定如何在ViewModel中为
EmployeeNameString
集合进行编码?如果筛选的搜索中存在noting。不要设置setter。只需确保
this.employeeNames
StarringViewModel
的构造函数中初始化它,就永远不会为null(
employeeNames=new List();<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>