一、數(shù)據(jù)存儲層
1、查找分頁列表
在寫用戶列表時遇到了問題,考慮到用戶可能會較多的情況需要分頁,在數(shù)據(jù)存儲層寫的方法是public IQueryable<T> FindPageList<TKey>(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc)。
主要問題就在紅色的order這兒,這個參數(shù)不好傳遞,比如:如果是已ID來排序哪TKey類型是int,如果以注冊時間來排序哪TKey類型就是datetime。如果我在業(yè)務(wù)邏輯層寫一個函數(shù)可以支持選擇排序類型,那么我沒有辦法聲明一個變量既可以存儲TKey為int的值,又可以存儲datetime的值,那么排序就要寫成下面這個樣子,感覺不舒服。
//排序 switch(order) { case 0://ID升序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.UserID, true).ToList(); break; case 1://ID降序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.UserID, false).ToList(); break; case 2://注冊時間降序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.RegTime, true).ToList(); break; case 3://注冊時間升序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.RegTime, false).ToList(); break; case 4://最后登錄時間升序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.LastLoginTime, true).ToList(); break; case 5://最后登錄時間降序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.LastLoginTime, false).ToList(); break; default://ID降序 _users.Items = Repository.FindPageList((int)pageSize, (int)pageIndex, out _users.TotalNumber, _where, u => u.UserID, false).ToList(); break; }后來將TKey設(shè)為dynamic類型,不論Expression<Func<T, dynamic>> order = u => u.UserID 或者u => u.RegTime都可以編譯通過,但是一運行就會出錯。
前幾天沒寫博客一直在考慮這個問題,后來還是換成用字符串的方式來動態(tài)排序。 步驟如下:
Ninesky.DataLibrary[右鍵]->添加->類,輸入類名OrderParam
namespace Ninesky.DataLibrary{ /// <summary> /// 排序參數(shù) /// </summary> public class OrderParam { /// <summary> /// 屬性名 /// </summary> public string PropertyName { get; set; } /// <summary> /// 排序方式 /// </summary> public OrderMethod Method { get; set; } } /// <summary> /// 排序方式 /// </summary> public enum OrderMethod { /// <summary> /// 正序 /// </summary> ASC, /// <summary> /// 倒序 /// </summary> DESC }}
新聞熱點
疑難解答
圖片精選