MVC3. Как выбрать дополнительный столбец из объединенной таблицы и отправить их все на просмотр?

#asp.net-mvc #asp.net-mvc-3 #linq

#asp.net-mvc #asp.net-mvc-3 #linq

Вопрос:

Как выбрать дополнительный столбец из объединенной таблицы и отправить их все на просмотр в виде списка страниц?

 public ViewResult Index(...)
{
    var newlist = from n in db.students
                  join o in db.info on n.id equals o.id
    select n;
    //     ^ This only select collection from "students" as "n".

    return View(newlist.ToPagedList(..., ...));
                     // ^ using PagedList Extenstion
}
  

Я хочу присоединиться к некоторым другим таблицам и получить несколько дополнительных столбцов.

Есть ли возможность использовать это в файле cshtml (Просмотр) вот так?:

 @foreach (var item in Model) {
    <td>@item.column_from_students_table_1</td>
    <td>@item.column_from_students_table_2</td>
    <td>@item.column_from_info_table_1</td>
    <td>...</td>
}
  

Ответ №1:

Вы могли бы создать свой собственный пользовательский тип представления и выбрать для этого:

ViewModel:

 public class StudenInfoView
{
    //From Students
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    //From info
    public int Age { get; set; }
}
  

Запрос Linq:

 var newlist = (from n in db.students
               join o in db.info on n.id equals o.id
               select new StudenInfoView {
                   Id = n.Id,
                   FirstName = n.FirstName,
                   LastName = n.LastName,
                   Age = o.Age
               });
  

Ответ №2:

Поскольку вы передаете свою сущность непосредственно в свое представление, которое поступает от какого-либо поставщика ORM (возможно, L2S или entity framework), вы можете использовать свойства как из таблиц student, так и info. Вы можете идеально извлекать столбцы из таблицы student с помощью

 <td>@item.column_from_students_table_1</td>
<td>@item.column_from_students_table_2</td>
  

когда дело доходит до выборки столбцов из информационной таблицы, это зависит от взаимосвязи между двумя таблицами (если она создана в БД). если класс student (созданный вашим mapper) имеет свойство типа EntitySet, вы можете получить доступ к столбцам из информационной таблицы следующим образом

 <td>@item.Infos.FirstOrDefault().Column_from_info_table</td>
  

Предостережение: не рекомендуется передавать вашу модель непосредственно в ваше представление. вы можете создать модель представления, адаптированную к потребностям этого конкретного представления, и вы можете заполнить и передать эту модель представления в представление.

Комментарии:

1. Спасибо за ваш ответ. Это помогло.

2. Я ценю ваш ответ. сэр, когда я использую @item.tablename. затем после «@item» имя поля. некоторые таблицы моей базы данных отображаются там нажатием «.» но некоторые отсутствуют, в чем причина этого, пожалуйста, скажите мне.

3. убедитесь, что вы создали связи с базой данных для рассматриваемых таблиц