zoukankan      html  css  js  c++  java
  • 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;
            }
        }
  • 相关阅读:
    条件语句的用法
    PHP取得当前文档所在的目录
    郁闷,一个语句调试很久
    PHP图片上传加水印(转)
    PHP多行多列分页
    ASP得到当前文件所在目录
    “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛D IP检测(绿)
    “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛E 成绩统计图(红)
    [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 讲解之用 ]
    《C++ Primer》 第04章 [ 数组和指针 ]
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/11276973.html
Copyright © 2011-2022 走看看