簡單談談如何實現對DataView排序
作者:LanceZhang
通過DataView的RowFilter屬性不能進行Select Top * ……的操作。同樣,DataTable也沒有直接的方法可以進行篩選(除非自己寫排序篩選算法,麻煩),而下面可有兩種方法可以以較少的代碼來實現Select Top * ……。
1. 直接用Linq對DataTable進行選取:
- var selectedRows = from r in m_Dt.AsEnumerable() orderby r.Field<DateTime>("postDate") descending select r;
- return selectedRows.Take(_RecordCount).ToList();
也就是先把DataTable中的DataRow進行排序,再take走前*條DataRow.
這種方法的缺點是,返回的結果集是泛型List,而不是DataView,如果需要組合成DataView排序,請借鑒2中的方法。
2. 自己寫方法實現:
- 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);
即可。 其實也就是先排序,再用前*條記錄組成一個新的DataView排序。
【編輯推薦】
責任編輯:彭凡
來源:
cnblogs