C# 我正试图从数据库中输出所有数据,但foreach语句中有一个错误

C# 我正试图从数据库中输出所有数据,但foreach语句中有一个错误,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我正试图从数据库中输出所有数据,但我的foreach语句中有一个错误,在2天内无法解决 控制器文件: public ActionResult Index() { PAPEntities db = new PAPEntities(); MoviesData[] movies = db.MoviesData.ToArray(); movies.Select(movie => new MovieViewModels {

我正试图从数据库中输出所有数据,但我的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>

电影名称
电影类别
电影年
电影价格
@foreach(模型中的var项目)
{
@item.MovieName
@项目.电影类别
@项目.电影年
@项目.电影价格
}
该模型是一个简单的类缩放MovieViewModel,具有6个属性


foreach语句无法对“MovieViewModels”类型的变量进行操作,因为“MovieViewModels”不包含“GetEnumerator”的公共实例定义

  • 您没有捕获
    Select
  • 您的视图可能没有正确的模型定义
  • 对于1,请注意,您应该在缓冲之前进行投影-如果LINQ可以在投影中绕过它,那么创建
    MoviesData
    对象的实际实例是没有意义的,因此:

    (注意:我冒昧地将
    moviewmodels
    重命名为
    moviewmodel

    MovieViewModel[]movies=db.MoviesData.Select(movie=>newmovieviewmodel
    {
    MovieID=movie.MovieID,
    MovieName=movie.MovieName,
    MovieDescription=movie.MovieDescription,
    MoviePrice=movie.MoviePrice,
    MovieCategory=movie.MovieCategory,
    MovieYear=movie.MovieYear
    }).ToArray();
    返回视图(电影);
    
    (这也意味着SQL可能仅限于您感兴趣的列,从而避免获取不必要的列)

    然后在视图中,您应该具有:

    @model MovieViewModel[]
    
    它告诉razor要用于
    模型的类型


    这样做:事情应该会成功。

    问题在于您使用的select语句<代码>选择
    在对其应用“获取结果”函数之前不会返回结果。e、 g
    ToList()
    ToArray()

    您需要在select语句之后应用
    ToArray()
    方法以在枚举器中获得结果

    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();
    

    请显示视图如何声明其模型。我想这就是问题所在。还要注意,您的
    Select
    调用实际上不会做任何事情。。。。LINQ不是这样工作的。我怀疑您想要
    var movies=db.MoviesData.Select(movie=>newmovieviewmodels{…}).ToList()
    或类似。视图上的
    @型号是什么?i、 e.
    型号
    的类型是什么?我怀疑它是
    moviewmodels
    ,而它应该是
    IEnumerable
    (注意:列表或数组可能会更好,但也需要对
    Index()
    方法进行相应的更改)。附带说明:当某个东西只代表一个项目时调用它肯定会引起混淆-
    moviewmodel
    会更好。编辑:正如Jon所指出的,你需要对
    Index()
    进行更改,因为你没有捕获
    Select
    的返回,目前它没有IEnumerable,但我也尝试了IEnumerable,但它不起作用,我会尝试你说的方式并给你反馈。我知道我不应该在评论中说谢谢,然而,我只是一个新手(你可能注意到了),我真的需要感谢那些花时间帮助新手的人。谢谢你,也感谢你所做的一切help@DiogoTeixeira说“谢谢”并不违反任何规则,评论也非常适合:)