Получить данные из двух таблиц (объединить) с помощью linq и вернуть результат в представление - PullRequest
16 голосов
/ 06 марта 2011

У меня есть две таблицы: Projects и ProjectsData, и я хочу выполнить запрос с объединением и получить результат в представлении.

В контроллере у меня есть этот код:

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
}

но это не работает ...

1 Ответ

42 голосов
/ 06 марта 2011

По вашему мнению, вы пытаетесь получить доступ к свойству 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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...