加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 从两个表(join)获取数据,并使用linq返回结果

发布时间:2020-12-16 00:23:21 所属栏目:asp.Net 来源:网络整理
导读:我有两个表:Projects和ProjectsData,我想使用join执行查询,并在View中获取结果。 在控制器我有这个代码: ViewBag.projectsData = (from pd in db.ProjectsData join p in db.Projects on pd.ProjectId equals p.ID where pd.UserName == this.HttpContex
我有两个表:Projects和ProjectsData,我想使用join执行查询,并在View中获取结果。

在控制器我有这个代码:

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 });

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

@foreach (var item in ViewBag.projectsData)
{
    @item.pd.UserName
}

但它不工作…

解决方法

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

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

因此,您可以先定义一个视图模型,其中包含您的视图所需的所有信息:

public class MyViewModel
{
    public ProjectData ProjectData { get; set; }
    public Project Project { get; set; }
}

然后在您的控制器操作中填充此视图模型并传递给视图:

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);
}

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

@model IEnumerable<AppName.Models.MyViewModel>
@foreach (var item in Model)
{
     <div>@item.ProjectData.UserName</div>
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读