Вывод метода раскрывающегося списка ICollection, соответствующего запросу формы коллекции

У меня есть 2 модели (Кино и Актеры)

Я уже могу получить список фильмов, содержащих выбранных актеров. И я могу вывести все это через Html.DisplayNameFor. Но я хочу использовать DDL для вывода актеров Icollection вместо цикла с подэлементом в @Html.DisplayNameFor(model => model.Actors). Поэтому мне нужно, чтобы раскрывающийся список соответствовал актеру SelectedList. вывод по умолчанию - все / И если я выбираю конкретный параметр фильма, такой как Жанр или Бюджет, то 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 мне нужна другая форма для каждой строки моего вывода. Потому что в каждом фильме может быть много актеров. Если у актеров слишком много столбцов, как я могу это скрыть? Или вывести какое-то количество с возможностью его расширения? Я решил добавить их в 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());

Он возвращает фильм. Как я могу получить Actors.Name (строку) из Movie, соответствующих ICollection Актера?

Я бы добавил эту строку в DDL.


person streamc    schedule 18.06.2016    source источник
comment
не совсем понял вопрос? Вам нужно имя первого актера или список актеров по фильмам? как вы говорите, вам нужна строка   -  person SWilko    schedule 18.06.2016
comment
Я уже могу получить список фильмов, содержащих выбранных актеров. И я могу вывести все это через Html.DisplayNameFor. Но я хочу использовать DDL для вывода актеров Icollection вместо цикла с подэлементом в @Html.DisplayNameFor(model => model.Actors). Поэтому мне нужно, чтобы раскрывающийся список соответствовал актеру SelectedList. вывод по умолчанию - все / И если я выбираю конкретный параметр фильма, такой как Жанр или Бюджет, то DDL с актерами должен соответствовать этому. Спасибо! Попытка быть более ясной. Я редактирую свой вопрос.   -  person streamc    schedule 19.06.2016
comment
В чем именно заключается ваш вопрос? Как показать выпадающий список?   -  person Gert Arnold    schedule 19.06.2016
comment
Выпадающий список вывода с динамически изменяющейся коллекцией актеров в зависимости от выбранного фильма,   -  person streamc    schedule 19.06.2016


Ответы (1)


Попробуй это

var actors = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor))).SelectMany(i => i.Actors);
person NEER    schedule 18.06.2016
comment
Я сделал это раньше. Но как я могу добавить его в выпадающий список? var AllActors = Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(u =› u.Actors); var ActorLst = новый список‹строка›(); ActorLst.AddRange(AllActors.Distinct()); И я получаю ошибку конвертации - person streamc; 19.06.2016
comment
Ознакомьтесь с разделом stackoverflow.com/questions/18382311/ @ifooi - person NEER; 19.06.2016
comment
Хорошо, спасибо. Я меняю список строк на список Актеров. А я бы читал. - person streamc; 19.06.2016
comment
Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(i =› i.Actors).Select(i =› new { i.Name}) @ если - person NEER; 19.06.2016
comment
var AllActors = Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(i =› i.Actors).Select(i =› new { i.Name }); var ActorLst = новый список‹строка›(); ActorLst.AddRange(AllActors.Distinct()); невозможно преобразовать из «System.Linq.IQueryable‹‹анонимный тип: строка Имя››» в «System.Collections.Generic.IEnumerable‹string›» Извините, мужчины. И Табкс. - person streamc; 19.06.2016
comment
Просто замените new { i.Name} на i.Name @ifoi - person NEER; 19.06.2016
comment
Да, это работает правильно и сделано наполовину, но мне нужно подумать более полно. С var AllActors = Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(i =› i.Actors).Select(i =› i.Name) ; Я могу вывести актеров только для выбранных актеров. Это хорошо, но когда я выбираю фильм, эта конструкция выводит всех актеров, несмотря на то, что не все из них существуют в фильме. Логически я думаю, что мне нужно добавить больше содержимого в var. - person streamc; 19.06.2016
comment
И добавьте несколько логических условий. - person streamc; 19.06.2016