国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Linq通用分頁(yè)類的實(shí)現(xiàn),可返回匿名類型 轉(zhuǎn)載

Linq通用分頁(yè)類的實(shí)現(xiàn),可返回匿名類型

      前兩天因?yàn)轫?xiàng)目需要,接觸到了Linq to Entities,打算寫個(gè)通用的分頁(yè)類。如果是用實(shí)體類型來做返回類型的話,是很簡(jiǎn)單的,但是當(dāng)使用了join之類的多表查詢后,返回的卻是一個(gè)匿名類型。怎么放也放不進(jìn)我寫的通用分頁(yè)類里,我嘗試把匿名類型轉(zhuǎn)換為Object,就是,把System.Linq.IQueryable<匿名類型>強(qiáng)制轉(zhuǎn)換為System.Linq.IQueryable<Object>會(huì)報(bào)錯(cuò)說不能轉(zhuǎn)換的,后來,用System.Linq.IQueryable<匿名類型>.Cast<object>()這個(gè)方法,嘗試轉(zhuǎn)為System.Linq.IQueryable<Object>,的確轉(zhuǎn)成功了,但是,更郁悶的問題又出現(xiàn)了,
當(dāng)ToList()的時(shí)候,又提示我“匿名類型轉(zhuǎn)Object錯(cuò)誤了”,暈...折騰了一天,終于搞出一個(gè)通用的分頁(yè)類。以下是源碼。
       本人第一次寫文章,表達(dá)能力和寫作能力都不太好,此代碼的確是比較簡(jiǎn)單,希望高手們不要見笑...謝謝。
  1
        private void Form1_Load(object sender, EventArgs e)
  2
        
{
  3
            Northwind db 
= new Northwind();          
  4

  5
            
//創(chuàng)建查詢語(yǔ)句
  6
            var query = (from t1 in db.exClass
  7
                     join t2 
in db.exClassCon                     
  8
                     on t1.ClassID equals t2.ClassID into it2
  9
                     orderby t1.ClassID descending
 10
                     select 
new
 11
                     
{
 12
                         t1,
 13
                         count 
= it2.Count()
 14
                     }
);
 15

 16
            
//實(shí)例化對(duì)象
 17
            var datalist = DataList<object>.Create(query,               //查詢語(yǔ)句
 18
                new { t1 = (exClass)null, count = 0 },                  //定義一個(gè)相同結(jié)構(gòu)的匿名空類
 19
                15);                                                  //頁(yè)碼和每頁(yè)大小
 20
            
 21
            dataGridView1.DataSource 
= datalist.Value;
 22

 23
            MessageBox.Show(
"當(dāng)前頁(yè):" + datalist.IndexPage.ToString() + "\r\n" +
 24
                
"最大頁(yè):" + datalist.PageCount.ToString() + "\r\n" +
 25
                
"當(dāng)前記錄數(shù):" + datalist.ThisPageRecordCount.ToString() + "\r\n" +
 26
                
"總記錄數(shù):" + datalist.AllRecordCount.ToString() + "\r\n" +
 27
                
"第一頁(yè):" + datalist.CanFirstPage.ToString() + "\r\n" +
 28
                
"上一頁(yè):" + datalist.CanPrevPage.ToString() + "\r\n" +
 29
                
"下一頁(yè):" + datalist.CanNextPage.ToString() + "\r\n" +
 30
                
"最后一頁(yè):" + datalist.CanLastPage.ToString() + "\r\n");
 31

 32
        }

 33

 34
        
/// <summary>
 35
        
/// 數(shù)據(jù)列表
 36
        
/// </summary>
 37
        
/// <typeparam name="T">類型</typeparam>

 38
        public class DataList<T> : IEnumerable
 39
        
{
 40
            
#region 成員變量
 41

 42
            
private System.Linq.IQueryable<T> query;
 43
            
private int allRecordCount;
 44
            
private int thisPageRecordCount;
 45
            
private int pageSize;
 46
            
private int pageCount;
 47
            
private int indexPage;
 48
            
private bool canFirstPage;
 49
            
private bool canPrevPage;
 50
            
private bool canNextPage;
 51
            
private bool canLastpage;
 52
            
private List<T> listValue;
 53

 54
            
#endregion

 55

 56
            
#region 構(gòu)造函數(shù)
 57

 58
            
//私有構(gòu)造函數(shù),只能通過內(nèi)部構(gòu)造
 59
            private DataList(System.Linq.IQueryable<T> Query, int IndexPage, int PageSize)
 60
            
{
 61
                query 
= Query;
 62
                indexPage 
= IndexPage;
 63
                pageSize 
= PageSize;
 64

 65
                Update();
 66
            }

 67

 68
            
private DataList(System.Linq.IQueryable<T> Query)
 69
                : 
this(Query, 10{ }
 70

 71
            
#endregion

 72

 73
            
#region 屬性
 74

 75
            
public int AllRecordCount
 76
            
{
 77
                
get return allRecordCount; }
 78
            }

 79

 80
            
public int ThisPageRecordCount
 81
            
{
 82
                
get return thisPageRecordCount; }
 83
            }

 84

 85
            
public int PageSize
 86
            
{
 87
                
get return pageSize; }
 88
                
set { pageSize = value; }
 89
            }

 90

 91
            
public int PageCount
 92
            
{
 93
                
get return pageCount; }
 94
            }

 95

 96
            
public int IndexPage
 97
            
{
 98
                
get return indexPage; }
 99
                
set { indexPage = value; }
100
            }

101

102
            
public bool CanFirstPage
103
            
{
104
                
get return canFirstPage; }
105
            }

106

107
            
public bool CanPrevPage
108
            
{
109
                
get return canPrevPage; }
110
            }

111

112
            
public bool CanNextPage
113
            
{
114
                
get return canNextPage; }
115
            }

116

117
            
public bool CanLastPage
118
            
{
119
                
get return canLastpage; }
120
            }

121

122
            
public List<T> Value
123
            
{
124
                
get return listValue; }
125
            }

126

127
            
#endregion

128

129
            
#region 索引器
130

131
            
public T this[int index]
132
            
{
133
                
get return listValue[index]; }
134
                
set { listValue[index] = value; }
135
            }

136

137
            
#endregion

138

139
            
#region 公開方法
140

141
            
/// <summary>
142
            
/// 創(chuàng)建自身實(shí)例
143
            
/// </summary>
144
            
/// <typeparam name="N">類型,如果此處為匿名類型,請(qǐng)用var 定義實(shí)體,且類后的T為object(其實(shí)什么也不重要,只是用于可以調(diào)用當(dāng)前類的靜態(tài)方法)</typeparam>
145
            
/// <param name="Query">Linq查詢語(yǔ)句</param>
146
            
/// <param name="type">元素類型</param>
147
            
/// <param name="IndexPage">開始頁(yè)</param>
148
            
/// <param name="PageSize">每頁(yè)大小</param>
149
            
/// <returns></returns>

150
            public static DataList<N> Create<N>(System.Linq.IQueryable Query, N type, int IndexPage, int PageSize)
151
            
{
152
                System.Linq.IQueryable
<N> query = (System.Linq.IQueryable<N>)Query;
153
                
return new DataList<N>(query, IndexPage, PageSize);
154
            }

155

156
            
public static DataList<N> Create<N>(System.Linq.IQueryable Query, int IndexPage, int PageSize)
157
            
{
158
                
return Create<N>(Query, IndexPage, PageSize);
159
            }

160

161
            
/// <summary>
162
            
/// 更新數(shù)據(jù)
163
            
/// </summary>

164
            public virtual void Update()
165
            
{
166
                allRecordCount 
= query.Count();
167

168
                
if (pageSize > 0)
169
                
{
170
                    query 
= query.Skip((indexPage - 1* pageSize).Take(pageSize);
171

172
                    thisPageRecordCount 
= query.Count();
173

174
                    
//計(jì)算分頁(yè)結(jié)果
175
                    pageCount = (allRecordCount % pageSize == 0? (allRecordCount / pageSize) : allRecordCount / pageSize + 1;
176
                    
if (indexPage > 1) canFirstPage = true; canPrevPage = true;
177
                    
if (indexPage < pageCount) canNextPage = true; canLastpage = true;
178
                }

179
                
else
180
                
{
181
                    thisPageRecordCount 
= allRecordCount;
182
                    pageCount 
= indexPage = 1;
183
                    canFirstPage 
= canPrevPage = canNextPage = canLastpage = false;
184
                }

185

186
                listValue 
= query.ToList();
187
            }

188

189
            
/// <summary>
190
            
/// 實(shí)現(xiàn)枚舉接口,不過返回的是object
191
            
/// </summary>
192
            
/// <returns></returns>

193
            public IEnumerator GetEnumerator()
194
            
{
195
                
return listValue.GetEnumerator();
196
            }

197

198
            
#endregion

199
        }
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DataList控件實(shí)現(xiàn)分頁(yè)功能
linq 動(dòng)態(tài)排序 order by
Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別
三層架構(gòu)搭建(asp.net mvc + ef)
第六篇 項(xiàng)目疑問
DataList 分頁(yè)源碼
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服