asp.net mvc-MVC3.如何从联接表中选择其他列并将它们全部发送到View




如何从联接表中选择其他列并将它们全部发送到View as 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文件(视图)中使用它吗?:

@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>
}

您可以创建自己的自定义视图类型并选择:

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

由于您将实体直接传递到来自某个ORM提供者(可能是L2S或实体框架)的视图,因此您可以使用student表和info表中的属性。您可以使用从学生表中完美地提取列

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

当涉及到从info表中获取列时,它取决于两个表之间的关系(如果它是在db中创建的)。如果学生类(由映射程序创建)具有EntitySet类型的属性,则可以访问等信息表中的列

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

注意事项:不建议将模型直接传递到视图中。您可以根据特定视图的需要创建一个视图模型,然后填充该视图模型并将其传递给视图。

相关内容

  • 没有找到相关文章

最新更新