与集合表单查询

时间:2016-06-18 15:30:08

标签: asp.net linq entity-framework-4 html.dropdownlistfor

我有2个模特(电影和演员)

我已经可以检索包含所选Actors的Movie列表。我可以通过Html.DisplayNameFor输出所有内容。但我想在@Html.DisplayNameFor(model => model.Actors)中使用DDL输出Icollection Actors而不是subitem循环。所以我需要dropdownlist对应于SelectedList Actor。默认输出是全部/如果我选择特定的电影参数,这样的流派或预算比DDL与演员应该对应。

public class Movie
{
    public int MovieID { get; set; }
    public string Title { get; set; }
    public string  Date { get; set; }
    public int Budget { get; set; }
    public string  Genre { get; set; }
    public virtual ICollection<Actor> Actors { get; set; }
}

public class Actor
{  
    public int ID { get; set;}
    public string Name { get; set; }
    public virtual ICollection<Movie> Movies { get; set; }
}

我用

实现输出
   <th>
        @Html.DisplayNameFor(model => model.Genre)
    </th>........................

    <th>.........................
        @Html.DisplayNameFor(model => model.Actors)
    </th>...............

使用Actors集合,我的输出的每一行都需要另一个表单。因为每部电影都可以有很多演员。 如果Actors有很多列我怎么能隐藏它?或输出一些具有扩展能力的数量? 我选择将它们添加到DropDownList。 也许一些新的AJAX表单或asp.net元素将是不错的选择。

因此我有MovieController:

if (!String.IsNullOrEmpty(SearchActor))
{             
    Movie = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor)));
}

return View(Movie.ToList());

它会返回一部电影。如何从对应于Actor ICollection的Actors.Name中检索Movie(字符串)?

我会将此字符串添加到DDL。

1 个答案:

答案 0 :(得分:1)

试试这个

var actors = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor))).SelectMany(i => i.Actors);