如何从联接表中选择其他列并将其全部发送到View作为PagedList?
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文件(View)中使用它?:
@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>
}
答案 0 :(得分:1)
您可以创建自己的自定义视图类型并选择:
视图模型:
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
});
答案 1 :(得分:0)
由于您将实体直接传递给来自某个ORM提供程序(可能是L2S或实体框架)的视图,因此您可以使用学生表和信息表中的属性。您可以使用
完美地从学生表中获取列<td>@item.column_from_students_table_1</td>
<td>@item.column_from_students_table_2</td>
从信息表中获取列时,它取决于两个表之间的关系(如果它是在db中创建的)。如果学生类(由您的映射器创建)具有EntitySet类型的属性,则可以访问信息表中的列,如
<td>@item.Infos.FirstOrDefault().Column_from_info_table</td>
警告:建议不要将模型直接传递给您的视图。您可以创建一个根据特定视图的需要定制的视图模型,并且可以填充该视图模型并将其传递给视图。