db.Database.SqlQuery完成分頁封裝


調用代碼:

            string sql = @"SELECT a.Id ,c.Title,a.Content,a.Status,b.ReportSum FROM dbo.Comment AS a 
                        INNER JOIN(SELECT CommentId, COUNT(Id) AS ReportSum FROM dbo.Reported
                        WHERE Type= 0 AND Status = 1 GROUP BY CommentId) AS b ON a.Id = b.CommentId
                        LEFT JOIN dbo.Consultation AS c ON a.OutsideId = c.Id
                        WHERE a.Type = 0 ";
            List<SqlParameter> parms = new List<SqlParameter>();

            if (!string.IsNullOrEmpty(search))
            {
                sql = sql + " AND c.Title LIKE @Serch ";
                parms.Add(new SqlParameter() { ParameterName = "Serch", Value = "%"+search+ "%" });
            }

            if (isStatus!=3)
            {
                sql = sql + " AND a.Status=@Status ";
                parms.Add(new SqlParameter() { ParameterName = "Status", Value = isStatus });
            }

            result.Total = ServiceSqlHelper.GetPageCount(db, sql, parms);
            var list = ServiceSqlHelper.PagerResult<CommentReported>(db, sql, "Id", parms);

 

封裝分頁代碼:

public static class ServiceSqlHelper
    {

        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbContext">上下文對象</param>
        /// <param name="sql">執行語句</param>
        /// <param name="sort">排序,注意寫法</param>
        /// <param name="parms">參數</param>
        /// <param name="pageSize">頁容量</param>
        /// <param name="pageIndex">頁碼</param>
        /// <returns></returns>
        public static List<T> PagerResult<T>(DbContext dbContext, string sql, string sort,List<SqlParameter> parms=null , int pageSize=10, int pageIndex=1)
        {
            int pageStart = pageSize * (pageIndex - 1);
            int pageEnd = pageSize * pageIndex;
            string sqlPage =
                string.Format(@"SELECT * FROM ( 
                SELECT ROW_NUMBER() OVER( ORDER BY {0} DESC) AS RowId, * FROM ({1}) a  
                ) AS t  WHERE t.RowId BETWEEN {2} AND {3}", sort,sql,pageStart,pageEnd) ;

            List<SqlParameter> parms1 = parms == null ? new List<SqlParameter>() : CloneParms(parms);

            var query = dbContext.Database.SqlQuery<T>(sqlPage, parms1.ToArray()).ToList();

            return query;
        }

        /// <summary>
        /// 獲取數據總條數
        /// </summary>
        /// <param name="dbContext">上下文對象</param>
        /// <param name="sql">sql語句</param>
        /// <param name="parms">參數</param>
        /// <returns></returns>
        public static int GetPageCount(DbContext dbContext, string sql, List<SqlParameter> parms=null)
        {
            List<SqlParameter> parms1= parms == null?new List<SqlParameter>(): CloneParms(parms);

            return dbContext.Database.SqlQuery<int>(string.Format("select count(*) from ({0}) a", sql), parms1.ToArray()).FirstOrDefault();
        }

        public static List<SqlParameter> CloneParms(List<SqlParameter> sources)
        {
            List<SqlParameter> list = new List<SqlParameter>();

            foreach (SqlParameter p in sources)
            {
                SqlParameter pp = new SqlParameter() { ParameterName = p.ParameterName, Value = p.Value };
                list.Add(pp);
            }

            return list;
        }
    }

 


免責聲明!

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



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