首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用linq从两个表(Join)中获取数据,并将结果返回到视图中

使用linq从两个表(Join)中获取数据,并将结果返回到视图中
EN

Stack Overflow用户
提问于 2011-03-06 07:02:43
回答 1查看 45.9K关注 0票数 17

我有两个表: Projects和ProjectsData,我想使用join执行查询并在视图中获得结果。

在控制器中,我有以下代码:

代码语言:javascript
复制
ViewBag.projectsData = (from pd in db.ProjectsData
                                   join p in db.Projects on pd.ProjectId equals p.ID
                                   where pd.UserName == this.HttpContext.User.Identity.Name 
                                   orderby p.Name, p.ProjectNo
                                   select new { ProjectData = pd, Project = p });

我应该在视图中使用什么来提取此数据。我试过了:

代码语言:javascript
复制
@foreach (var item in ViewBag.projectsData)
{
    @item.pd.UserName
}

但它不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-06 07:11:52

在您的视图中,您正在尝试访问pd属性,但该属性不存在。该属性称为ProjectData

也就是说,我强烈建议您使用视图模型和强类型视图,而不是ViewBag。通过这种方式,您还可以在视图中获得Intellisense,这将帮助您选择正确的名称。

因此,您可以从定义一个视图模型开始,该模型将包含视图所需的所有信息:

代码语言:javascript
复制
public class MyViewModel
{
    public ProjectData ProjectData { get; set; }
    public Project Project { get; set; }
}

然后在你的控制器内部,填充这个视图模型并传递给视图:

代码语言:javascript
复制
public ActionResult Index()
{
    var viewModel = 
        from pd in db.ProjectsData
        join p in db.Projects on pd.ProjectId equals p.ID
        where pd.UserName == this.HttpContext.User.Identity.Name 
        orderby p.Name, p.ProjectNo
        select new MyViewModel { ProjectData = pd, Project = p };
    return View(viewModel);
}

最后,在强类型视图中使用视图模型:

代码语言:javascript
复制
@model IEnumerable<AppName.Models.MyViewModel>
@foreach (var item in Model)
{
     <div>@item.ProjectData.UserName</div>
}
票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5207382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档