实体框架:选择导致错误的字段名称

时间:2018-02-05 11:15:45

标签: asp.net-mvc entity-framework

当我从db中提取数据时提到字段名称的那一刻,我开始收到错误。

在我的代码出现之前它正在运行:

var customer = from s in db.Customers
               select s;

我将其更改为:

var customer = (from s in db.Customers
       select new
       {
        CompanyName = s.CompanyName,
        ContactName = s.ContactName,
        ContactTitle = s.ContactTitle,
        Address = s.Address,
       });

我开始收到如下错误:

  

传递到字典中的模型项是类型的   'PagedList.PagedList 1[<>f__AnonymousType2 4 [System.String,System.String,System.String,System.String]]',   但是这个字典需要一个类型的模型项   'PagedList.IPagedList`1 [MVCCRUDPageList.Models.Customer]'。

我的观点如下:

@model PagedList.IPagedList<MVCCRUDPageList.Models.Customer>
@using PagedList.Mvc;

2 个答案:

答案 0 :(得分:1)

导致此错误的原因是您未将Customer模型发送到视图 通过执行select new { ... },您将创建一个匿名对象。

您可以考虑将代码更改为:

select new MVCCRUDPageList.Models.Customer
{
    CompanyName = s.CompanyName,
    ContactName = s.ContactName,
    ContactTitle = s.ContactTitle,
    Address = s.Address,
}

您可能仍需要将IQueryable转换为IPagedList

答案 1 :(得分:1)

错误告诉您视图需要一种类型,但您传递的是另一种类型。您拥有的Linq Select方法是投射到匿名类型而不是预期的Customer类。将代码更改为匹配,类似这样

var customer = (from s in db.Customers
   select new Customer //<--- This here, you may need to use 
                       //     the full namespace MVCCRUDPageList.Models
   {
    CompanyName = s.CompanyName,
    ContactName = s.ContactName,
    ContactTitle = s.ContactTitle,
    Address = s.Address,
   });