成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析LINQ通用分頁綁定方法的實現

開發 后端
本文將簡單討論一下實現LINQ通用分頁綁定方法,希望通過本文能對大家用好LINQ有所幫助。

在這里我們將討論LINQ通用分頁綁定方法,希望通過本文能對大家了解LINQ通用分頁有所幫助,在這里將展示更多的代碼。

#T#

在LINQ中,IQueryable <T>接口和IEnumerable <T>接口都分別提供了Skip方法和Take方法,用來做分頁非常合適.因此我就想用他們做一個分頁控件,因為IQueryable <T> 是繼承自 IEnumerable <T> 的。因此使用接口僅需要針對后者就可以了。使用的時候只需提供數據源、綁定的GridView的、每頁大小即可。現在問題就出了在數據源上,要求用戶提供一個數據源類型,即IQueryable <T>接口和IEnumerable <T>接口? T是可確定類型(已知類型)的話還可以,若T是匿名類型,如

  1. var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country };  

list的類型只有在運行時才能得到,怎么辦呢!其實很簡單我,我們可以使用 “參數推導泛型類型”的方法來實現:
看下面的代碼(因為重點不在這里所以 代碼寫的比較粗糙):

  1. public void BindBoundControl<TSource>(IEnumerable<TSource> DataSource, GridView BoundControl, int PageSize)  
  2.         {  
  3.  
  4.             //獲取總記錄數(這里可以使用參數傳入總頁數 就不必每次都執行下面方法)  
  5.             int totalRecordCount = DataSource.Count();  
  6.  
  7.             //計算總頁數  
  8.             int totalPageCount = 0;  
  9.  
  10.             if (PageSize == 0)  
  11.             {  
  12.                 PageSize = totalRecordCount;  
  13.             }  
  14.             if (totalRecordCount % PageSize == 0)  
  15.             {  
  16.                 totalPageCount = totalRecordCount / PageSize;  
  17.             }  
  18.             else 
  19.             {  
  20.                 totalPageCount = totalRecordCount / PageSize + 1;  
  21.             }  
  22.  
  23.             //從參數中獲取當前頁碼  
  24.             int CurrentPageIndex = 1;  
  25.  
  26.             //如果從參數中獲取頁碼不正確 設置頁碼為第一頁  
  27. if (!int.TryParse(HttpContext.Current.Request.QueryString["Page"], out CurrentPageIndex) || CurrentPageIndex <= 0 || CurrentPageIndex > totalPageCount)  
  28.             {  
  29.                 CurrentPageIndex = 1;  
  30.             }  
  31.             //綁定數據源  
  32.             BoundControl.DataSource = DataSource.Skip((CurrentPageIndex - 1) * PageSize).Take(PageSize);  
  33.             BoundControl.DataBind();  
  34.         } 

調用 

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     NorthwindEntities de = new NorthwindEntities();  
  4.  
  5.     BindingUtils bind = new BindingUtils();  
  6.     //先排序與一下再綁定  
  7.     bind.BindBoundControl<Customers>(de.Customers.OrderBy(v=>v.CustomerID), this.GridView1, 10);    

下面我們只是需要重載一下我們的分頁方法實現“參數推導泛型類型”就可以了 代碼如下:

  1. public void BindBoundControl<TSource>(IEnumerable<TSource> DataSource, TSource type, GridView BoundControl, int PageSize)  
  2. {  
  3.     this.BindBoundControl(DataSource, BoundControl, PageSize);  

調用

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     NorthwindEntities de = new NorthwindEntities();  
  4.     var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country };  
  5.     BindingUtils bind = new BindingUtils();  
  6.     bind.BindBoundControl(list.OrderBy(c=>c.City), list.FirstOrDefault(), this.GridView1, 10);    

這個方法很簡單的 只是通過 list.FirstOrDefault() 做參數 來推導 方法中 BindBoundControl<TSource> 的TSource 就可以了,當然因為每次分頁時都會執行 list.FirstOrDefault() 會損失一點點的效率。

原文標題:非常簡單的實現LINQ通用分頁綁定方法

鏈接:http://www.cnblogs.com/ejiyuan/archive/2009/12/22/1629806.html

責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-17 08:47:00

Linq插入數據

2009-09-14 16:29:39

LINQ嵌套

2009-09-14 19:14:51

LINQ動態查詢

2009-09-14 09:46:00

LINQ to SQL

2009-09-14 18:23:59

LINQ嵌套查詢

2009-09-17 09:24:57

Linq實現分頁

2009-09-14 19:55:03

LINQ事務處理

2009-09-13 21:52:16

LINQ字符串

2009-09-15 14:30:11

Linq連接

2009-09-17 17:34:23

linq to sql

2009-09-14 19:20:22

LINQ TO SQL

2009-09-07 16:44:28

Linq String

2009-09-16 15:33:22

LINQ to XML

2009-09-15 13:30:54

linq級聯

2009-09-17 13:30:32

LINQ to XML

2009-09-10 18:02:23

LINQ to SQL

2009-09-14 16:46:15

LINQ to XML

2009-09-16 17:11:35

LINQ To SQL

2012-09-18 09:39:57

Linq項目高效

2009-09-15 10:35:11

linq多表查詢
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产成人精品女人久久久野战 | 亚洲性人人天天夜夜摸 | 7799精品视频天天看 | 免费视频成人国产精品网站 | 欧美精品一区三区 | 日韩成人在线网站 | 91亚洲精品国偷拍自产在线观看 | 欧美一区免费在线观看 | 精品一区二区免费视频 | 欧美视频三区 | 成人在线免费网站 | 亚洲视频网 | 一区二区三区在线电影 | 欧美一区二区三区在线播放 | 黄网站免费在线看 | 国产二区三区 | 欧美精品一区在线发布 | 国内自拍偷拍一区 | 999精品在线观看 | 国产日韩一区二区 | 伊大人久久 | 天堂一区二区三区 | 中文字幕精品一区二区三区精品 | 欧美成人自拍 | 毛片片| 午夜国产精品视频 | 老牛影视av一区二区在线观看 | 色综合一区二区三区 | 亚洲免费在线 | 久久国产精品一区二区三区 | 国产伦精品一区二区三区四区视频 | 欧美色欧美亚洲另类七区 | 国产午夜精品久久久久免费视高清 | 欧美激情在线一区二区三区 | 91网站在线观看视频 | 国产精品久久久久久久模特 | 中文字幕一区二区三区精彩视频 | 久久久国产精品视频 | 狠狠色综合网站久久久久久久 | 亚洲国产精品99久久久久久久久 | 91精品国产麻豆 |