Я пытаюсь вывести все данные из моей базы данных, и в операторе foreach есть ошибка - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь вывести все данные из базы данных, но у меня есть эта ошибка в моем операторе foreach, которую я не могу решить в течение 2 дней

Файл контроллера:

 public ActionResult Index()
    {
        PAPEntities db = new PAPEntities();
        MoviesData[] movies = db.MoviesData.ToArray();

        movies.Select(movie => new MovieViewModels
        {
            MovieID = movie.MovieID,
            MovieName = movie.MovieName,
            MovieDescription = movie.MovieDescription,
            MoviePrice = movie.MoviePrice,
            MovieCategory = movie.MovieCategory,
            MovieYear = movie.MovieYear
        });


        return View(movies);
    }

Вид:

 <table class="table table-bordered table-responsive table-hover">
    <tr>
        <th><b>Movie Name </b></th>
        <th><b>Movie Category </b></th>
        <th><b>Movie Year </b></th>
        <th><b>Movie Price</b></th>

    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.MovieName</td>
            <td>@item.MovieCategory</td>
            <td>@item.MovieYear
            <td>@item.MoviePrice</td>
        </tr>
    }
</table>

Модель представляет собой простой класс с именем MovieViewModel с 6 свойствами

оператор foreach не может работать с переменными типа «MovieViewModels», поскольку «MovieViewModels» не содержит общедоступного определения экземпляра для «GetEnumerator»

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Здесь есть несколько моментов:

  1. вы не захватываете результат Select
  2. предположительно, у вашего представления нет правильного определения модели

Для 1 обратите внимание, что вы должны проецировать до буферизации - нет смысла создавать фактические экземпляры объекта MoviesData, если LINQ может обойти его в проекции, так:

(примечание: я позволил себе переименовать MovieViewModels в MovieViewModel)

MovieViewModel[] movies = db.MoviesData.Select(movie => new MovieViewModel
{
    MovieID = movie.MovieID,
    MovieName = movie.MovieName,
    MovieDescription = movie.MovieDescription,
    MoviePrice = movie.MoviePrice,
    MovieCategory = movie.MovieCategory,
    MovieYear = movie.MovieYear
}).ToArray();

return View(movies);

(это также означает, что SQL может быть ограничен только столбцами, которые выВы заинтересованы в том, чтобы избежать извлечения ненужных столбцов)

Тогда в представлении вы должны иметь:

@model MovieViewModel[]

, который сообщает бритве тип, который нужно использовать для Model.

С этим: все должно работать.

0 голосов
/ 23 мая 2019

Проблема с оператором select select, который вы используете.Select не возвращает результат, пока вы не примените к нему функцию получения результата.например, ToList() или ToArray() и т. д.

enter image description here

Вам необходимо применить метод ToArray() после оператора select, чтобы получить результат в перечислителе.

MovieViewModel[] movies = db.MoviesData.Select(movie => new MovieViewModel
{
    MovieID = movie.MovieID,
    MovieName = movie.MovieName,
    MovieDescription = movie.MovieDescription,
    MoviePrice = movie.MoviePrice,
    MovieCategory = movie.MovieCategory,
    MovieYear = movie.MovieYear
}).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...