#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. убедитесь, что вы создали связи с базой данных для рассматриваемых таблиц