探討mvc下linq多表查詢使用viewModel的問題


   最近在開發mvc3的時候發現了一個問題,就是如何在view頁面顯示多表查詢的數據,最簡單的辦法就是使用viewmodel了,以下本人使用viewmodel來實現多表查詢的3中方法,

先貼代碼再說:

1  第一種是將頁面顯示多表的數據(也就是匯總各個model表的字段),然后再viewmodel中顯示

1 public class ResultAdList
2     {
3         public int A_Id;
4         public string A_userid;
5         public int B_Id;
6         public string B_typename;
7     }

 

public class AdRepository
    {
        private DataAdDataContext db = new DataAdDataContext();

        public IQueryable<ResultAdList> AdList { get; private set; }
         public AdRepository()
        {
            this.AdList = from a in db.R_ad_list
                          join b in db.R_ad_type on a.A_typeid equals b.id
                          select new ResultAdList
                          {
                              A_Id = a.id,
                              A_userid = a.A_userid,
                              B_Id = b.id,
                              B_typename=b.T_ad_typename
              };
        }

}

 

1 public ActionResult Index()
2         {
3             return View("Index", new AdRepository());
4         }

view中這樣寫:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Dmj.Models.AdRepository>" %>
 
 <% foreach (var item in Model.AdList) { %>
 <% } %>

接着第二中方法:

1  public class demoshopViewModels
2 
3     {
4 
5         public IEnumerable<商店> shop { get; set; }
6 
7         public IEnumerable<演示> demo { get; set; }
8 
9     }


linq方法可參照AdRepository方法,大同小異,路過

view中這樣寫

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication.ViewModels.demoshopViewModels>" %>
<%foreach (var item in Model.shop)

  {

      //這裡是shop Models

  } %>

  

<%foreach (var item in Model.demo)

  {

      //這裡是demo Models

  } %>


第三種直接上圖:

model中

 

viewmodel圖

view圖

 

     目測三種方法都差不多,只有細微的差別,個人覺得第三中最簡單也是最常用的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM