C#數據集合分頁處理


 1:集合進行分頁


     ///
<summary> /// 分頁處理 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="item"></param> /// <param name="pageSize"></param> /// <param name="singlePageList"></param> protected void ToPagingProcess<TEntity>(IEnumerable<TEntity> item, int pageSize, Action<IEnumerable<TEntity>> singlePageList) { if (item != null && item.Count() > 0) { var count = item.Count(); var pages = item.Count() / pageSize; if (count % pageSize > 0) { pages += 1; } for (int i = 1; i <= pages; i++) { var currentPageItem = item.Skip((i - 1) * pageSize).Take(pageSize); singlePageList(currentPageItem); } } }
    注意:特殊情況下會存在數據重復的情況出現

 2:SQL進行分頁

    /// <summary>
    /// 用於顯示列表的公共參數
    /// 無論前台頁面用何種Grid,這里做為系統Grid參數名不會變
    /// </summary>
    public class GridParameter
    {
        /// <summary>
        /// 當前頁
        /// </summary>
        public int Page { get; set; }

        /// <summary>
        /// 頁總數
        /// </summary>
        public int TotalPages { get; set; }

        /// <summary>
        /// 行總數
        /// </summary>
        public int Records { get; set; }

        /// <summary>
        /// 每頁顯示的行數
        /// </summary>
        public int PageSize { get; set; }

        /// <summary>
        /// 排序列名
        /// </summary>
        public string SortName { get; set; }

        /// <summary>
        /// 排序方式(asc/desc)
        /// </summary>
        public string SortOrder { get; set; }

        /// <summary>
        /// 不排序
        /// </summary>
        /// <remarks>
        /// 這個問題也可以解決,可排序前判斷 q.Expression.ToString() 中是否含有".OrderBy("或".OrderByDescending("
        /// </remarks>
        public bool NotSort { get; set; }

        /// <summary>
        /// 搜索內容
        /// </summary>
        public string SearchText { get; set; }

        /// <summary>
        /// 搜索字段。
        /// 在多字段搜索里不用此屬性
        /// </summary>
        public string SearchField { get; set; }

        /// <summary>
        /// 用戶數據。通常配合統計結果,存入json數據。
        /// </summary>
        public object UserData { get; set; }
 
        private string _statsSign = null;
        /// <summary>
        /// 統計標識,配合Stats屬性
        /// </summary>
        public string StatsSign
        {
            get { return _statsSign; }
            set
            {
                _statsSign = value;
                if (!string.IsNullOrEmpty(_statsSign) && Stats == null)
                {
                    Stats = new Dictionary<object, object>();
                }
            }
        }
        /// <summary>
        /// 統計列表
        /// </summary>
        public Dictionary<object, object> Stats { get; set; }

        public GridParameter() { }
        public GridParameter(int page, int pageSize, string sortName, string sortOrder, string searchText)
        {
            this.Page = page;
            this.PageSize = pageSize;
            this.SortName = sortName;
            this.SortOrder = sortOrder;
            this.SearchText = searchText;
        }
    }
    protected List<T> GetPagedList<T>(string sql, GridParameter gp)
        {
            if (gp.Page <= 0) gp.Page = Defaults.GridPage;
            if (gp.PageSize <= 0) gp.PageSize = Defaults.GridPageSize;
            var endNum = (gp.Page - 1) * gp.PageSize;//分頁結束位置
            var startNum = (gp.Page - 1) * gp.PageSize + gp.PageSize;//分頁開始位置
            string orderBy = "";
            //排序
            if (!string.IsNullOrEmpty(gp.SortName))
            {
                orderBy += " ROW_NUMBER() OVER(ORDER BY " + gp.SortName + " " + gp.SortOrder + ")";
            }
            else
            {
                orderBy += " ROWNUM";
            }
            //分頁SQL
            string sqlPage = string.Format("SELECT * FROM(SELECT TABLE1.*,{3} RN FROM({0}) TABLE1) WHERE RN<={1} AND RN>{2}", sql, startNum, endNum, orderBy);
            //查詢總數SQL
            string sqlTotal = string.Format("SELECT COUNT(1) FROM ({0})", sql);
            gp.Records = ObjContext.ExecuteStoreQuery<int?>(sqlTotal).FirstOrDefault() ?? 0;
            //執行SQL
            return ObjContext.ExecuteStoreQuery<T>(sqlPage, null).ToList();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM