mvc 3 - 具有多个IEnumerable的模型

时间:2012-05-20 03:45:50

标签: asp.net-mvc-3 ienumerable inner-join

我正在寻找解决问题的最佳方法。

我只需要显示3个不同实体的名称,而不是其他信息。

实体是:

db.TR{TRID, ProjectID, TemplateID, version}
db.Project{ProjectID, ProjectName}
db.Template{TemplateID, TemplateName}

我希望用最好的方法在网格中显示所有结果:

TRID - ProjectName - TemplateName - Version

我想知道你将如何做模型,控制器(索引函数)和视图。

到目前为止,我的View函数如下所示:

public ViewResult Index()  
{  
    var viewModel = from tr in db.TRs   
    join proj in db.Projects on tr.ProjectID equals proj.ProjectID   
    join templ in db.Templates on tr.TemplateID equals templ.TemplateID  
    orderby proj.ProjectName  
    select new  
    {  
        TRList = tr.TRID,  
        TemplateList = templ.TemplateName,  
        ProjectList = proj.ProjectName,  
        Version = tr.version  
    }   
    return View(viewModel); //Go in Index.cshtml  
}

视图是:

@model IEnumerable <OnlineTR.WebUI.Areas.Admin.Models.TRManagerModel>  
@foreach (var item in Model)  
             {
            <tr>  
                <td>  
                   @Html.DisplayFor(modelitem => item.TRList);  
                </td>  
                <td>  
                   @Html.DisplayFor(modelitem => item.ProjectList);  
                </td>  
                <td>  
                   @Html.DisplayFor(modelitem => item.TemplateList);  
                </td>  
            </tr>  
            }

我正在尝试找到一种方法来使用只使用我需要的sql请求。

如果你能告诉我如何使用.include,那就太棒了。到目前为止我已经尝试了,但它不接受()中的lambda表达式,它需要一个字符串路径。 (也许错过了使用?)

非常感谢。亚历克斯。

1 个答案:

答案 0 :(得分:1)

您的代码的问题在于您将匿名类型的IEnumerable传递给您的视图,但它需要类型

@model IEnumerable <OnlineTR.WebUI.Areas.Admin.Models.TRManagerModel>

修复您的LINQ查询以选择具体类型,它将起作用

select new TRManagerModel
    {  
        TRList = tr.TRID,  
        TemplateList = templ.TemplateName,  
        ProjectList = proj.ProjectName,  
        Version = tr.version  
    }