簡(jiǎn)單談?wù)勅绾螌?shí)現(xiàn)對(duì)DataView排序
作者:LanceZhang
通過(guò)DataView的RowFilter屬性不能進(jìn)行Select Top * ……的操作。同樣,DataTable也沒(méi)有直接的方法可以進(jìn)行篩選(除非自己寫(xiě)排序篩選算法,麻煩),而下面可有兩種方法可以以較少的代碼來(lái)實(shí)現(xiàn)Select Top * ……。
1. 直接用Linq對(duì)DataTable進(jìn)行選?。?/P>
- var selectedRows = from r in m_Dt.AsEnumerable() orderby r.Field<DateTime>("postDate") descending select r;
- return selectedRows.Take(_RecordCount).ToList();
也就是先把DataTable中的DataRow進(jìn)行排序,再take走前*條DataRow.
這種方法的缺點(diǎn)是,返回的結(jié)果集是泛型List,而不是DataView,如果需要組合成DataView排序,請(qǐng)借鑒2中的方法。
2. 自己寫(xiě)方法實(shí)現(xiàn):
- private static DataView GetTopDataViewRows(DataView dv, int n)
- {
- DataTable dt = dv.Table.Clone();
- for (int i = 0; i < n - 1; i++)
- {
- if (i >= dv.Count)
- {
- break;
- }
- dt.ImportRow(dv[i].Row);
- }
- return new DataView(dt, dv.RowFilter, dv.Sort, dv.RowStateFilter);
- }
使用:
- m_View.Sort = "postDate DESC";
- m_View = GetTopDataViewRows(m_View, 9);
即可。 其實(shí)也就是先排序,再用前*條記錄組成一個(gè)新的DataView排序。
【編輯推薦】
責(zé)任編輯:彭凡
來(lái)源:
cnblogs