【问题标题】:MVC error "requires ienumerable instead of list"MVC 错误“需要 ienumerable 而不是列表”
【发布时间】:2015-10-08 06:52:11
【问题描述】:

试图显示来自 2 个表、员工和部门的值,因此我尝试执行 linq sql 查询,但是当我在 Web 浏览器中打开我的应用程序时它不起作用。 MVC 新手,这是我第一次使用 linq to sql,所以我不确定出了什么问题!

我的错误:

传入字典的模型项的类型为“System.Collections.Generic.List1[<>f__AnonymousType74[System.String,System.String,StaffDetails.Models.Department,StaffDetails.Models.Site]]”,但是此词典需要“System.Collections.Generic.IEnumerable`1[StaffDetails.Models.Staff]”类型的模型项。

索引视图

    public ActionResult Index()
    {
        IList<Staff> staffList = new List<Staff>();

        var query = (from s in db.Staffs
                     from d in db.Departments
                     where s.DeptID == d.DeptID
                     select new
                     {
                         name = s.Name,
                         email = s.Email,
                         department = s.Department,
                         site = d.Site
                     }
                     ).ToList();

        return View(query);
    }

表格

【问题讨论】:

    标签: c# asp.net-mvc linq list ienumerable


    【解决方案1】:

    问题是您传递的是匿名类型,但您的视图需要IEnumerable&lt;Staff&gt;,因此在投影您的LINQ 查询时,您需要像这样投影Staff 类型:-

    List<Staff> query = (from s in db.Staffs
                         from d in db.Departments
                         where s.DeptID == d.DeptID
                         select new Staff //here
                         {
                             Name = s.Name,
                             Email= s.Email,
                             Department = s.Department,
                             Site = d.Site
                         }).ToList();
    

    更新:

    好的,所以你的Staff 是一个映射实体,所以在这种情况下你应该不能直接映射它。您要么需要DTO,要么可以先投影匿名类型并使用AsEnumerable() 将操作引入linq-to-objects,然后从那里像这样投影:-

    IEnumerable<Staff> staffList = (from s in db.Staffs
                         from d in db.Departments
                         where s.DeptID == d.DeptID
                         select new
                         {
                             name = s.Name,
                             email = s.Email,
                             department = s.Department,
                             site = d.Site
                         }).AsEnumerable()
                           .Select(x => new new Staff 
                              {
                                 Name = x.name,
                                 Email= x.email,
                                 Department = x.department,
                                 Site = x.site
                              });
    

    【讨论】:

    • 你好!在实现之后,我收到另一个错误“无法在 LINQ to Entities 查询中构造实体或复杂类型'StaffDBModel.Staff'。”你知道我为什么会收到错误吗?谢谢您的帮助! :>
    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多