Linq to sql 传入字典的模型项的类型为';System.Data.Linq.DataQuery`1[Models.MailListViewModel]&x27;

Linq to sql 传入字典的模型项的类型为';System.Data.Linq.DataQuery`1[Models.MailListViewModel]&x27;,linq-to-sql,model-view-controller,Linq To Sql,Model View Controller,我得到一个错误,说: 传递到字典的模型项的类型为“System.Data.Linq.DataQuery`1[WebUI.Models.MailListViewModel]”,但此字典需要类型为“WebUI.Models.MailListViewModel”的模型项 这在我的控制器中: public ViewResult List() { var mailToShow = from m in mailRepository.Mail join

我得到一个错误,说:

传递到字典的模型项的类型为“System.Data.Linq.DataQuery`1[WebUI.Models.MailListViewModel]”,但此字典需要类型为“WebUI.Models.MailListViewModel”的模型项

这在我的控制器中:

public ViewResult List()
    { var mailToShow = from m in mailRepository.Mail
                         join p in profilesRepository.Profiles on m.SenderId equals p.ProfileId 
                         select new MailListViewModel
                                    {
                                        SenderId = m.SenderId,
                                        ProfileId = p.ProfileId,
                                        UserName = p.UserName,
                                        Subject = m.Subject
                                    }; 
       return View(mailToShow);
    }
这在我的MailListViewModel中:

public class MailListViewModel
{        
    public int SenderId;
    public int ProfileId;
    public string UserName;
    public string Subject;
}
我认为:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<WebUI.Models.MailListViewModel>" %>

<% foreach (var m in (IEnumerable)Model)
       { %>
    <tr>
        <td>
        </td>
        <td>TODO image</td>   
        <td>
        <%: Model.SenderId %></td>

        <td><%: Model.Subject%></td>
    </tr>
    <% } %>

待办事项图像
错误消息似乎相互冲突,表示我使用的是正确的模型


我该怎么办?

您的查询将返回一个
IQueryable
,对于查询中的每个结果,本质上都是一个
MailListViewModel
。您的视图只需要一个
MailListViewModel

您应该更新视图以期望
IEnumerable
,如下所示:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<WebUI.Models.MailListViewModel>>" %>


此外,一旦您完成了这项操作,就不应该将
模型
强制转换为
IEnumerable
,因为这将导致枚举中的每个项都被视为类型
对象
,因此它将看起来好像您的属性都不存在。

很好,现在几乎可以工作了!更新视图后,我收到消息:CS1061:“object”不包含“Subject”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Subject”(是否缺少using指令或程序集引用?)突出显示:Intellisense说:无法解析符号“主题”,我下一步应该尝试什么?如果您仍然将模型转换为IEnumerable,可能就是这样。我已经相应地更新了我的答案。Closer:)现在我收到一个错误,它说:“查询包含对在不同数据上下文中定义的项的引用。”它指的是这样一行:“您不能跨两个数据上下文联接。您必须只使用一个或转换为(过滤的)列表(.ToList())然后加入列表,因为这将使用LinqToObjects。谢谢。我现在将尝试两种不同的查询,看看是否有效,如果无效,我将尝试列表解决方案。