在视图中显示动态左外连接结果

时间:2013-06-17 16:58:37

标签: asp.net-mvc entity-framework ef-code-first

我在Entity Framework中进行左外连接,并在ViewBag中发送输出以显示在表中。但是,View中不显示任何内容。我的代码如下。

        var clients = db.Client
                .Include("ClientInformation")
                .Where(t => t.IsApplicationRegistered == false)
                .Take(20);

        var q = (from c in clients
                join a in db.Agent
                on c.AgentUserId equals a.AgentUserId into jointable
                from x in jointable.DefaultIfEmpty()
                select new 
                { 
                    c.ClientId,
                    c.ClientInformation.FirstName,
                    c.ClientInformation.FamilyName,
                    c.ClientInformation.Address,
                    AgentFirstName = x.FirstName,
                    AgentLastName = x.LastName
                }).ToList();

        ViewBag.clients = q;

这将检索结果(我可以在调试期间通过IntelliSense查看它们),但视图不显示任何内容。示例视图如下所示。

@foreach (dynamic item in ViewBag.clients)
    {
        <tr>
            <td>@item.FirstName @item.FamilyName</td>
            <td>@item.Address</td>
            <td>@item.AgentFirstName @item.AgentLastName</td>
        </tr>
    }

有什么想法吗?感谢。

更新

View内,我收到了异常

'object' does not contain a definition for 'FirstName'

但是,当我将鼠标悬停在item圈内的foreach时,我可以清楚地看到它存在。

1 个答案:

答案 0 :(得分:1)

我的问题在这里得到了解答:dynamic type in mvc view

  

您不能将匿名类型用作模型。原因是编译器将匿名类型作为内部发出。这意味着只能使用当前程序集访问它们。但正如您所知,Razor视图由ASP.NET运行时编译为单独的程序集,无法使用这些匿名类型。

     

显然,在这种情况下,正确的方法是使用视图模型。

所以,我只会使用一个View Model。

有关这方面的更多信息,请访问:Dynamic Anonymous type in Razor causes RuntimeBinderException