微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MVC3如何从联接表中选择其他列并将其全部发送到View?

如何解决MVC3如何从联接表中选择其他列并将其全部发送到View?

| 如何从联接表中选择其他列,并将它们全部作为PagedList发送到View?
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或实体框架)的视图,因此您可以使用来自学生表和信息表的属性。您可以使用以下方法完美地从学生表中获取列
<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>
警告:建议不要将模型直接传递到视图。您可以根据自己的特定需求创建视图模型,然后可以填充该视图模型并将其传递给视图。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。