调用代码:

            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!=)
{
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=, int pageIndex=)
{
int pageStart = pageSize * (pageIndex - );
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;
}
}

db.Database.SqlQuery完成分页封装的更多相关文章

  1. oracle Entity db.Database.SqlQuery ORA-01843: 无效的月份

    原因是oracle的日期格式化格式和本地语言环境的日期格式不一致导致的. 一般情景为oralce格式为英文格式 本地服务器或者开发机的环境为中文环境. 使用Dbcontext 实例一般不会有问题. 但 ...

  2. MVC5 DBContext.Database.SqlQuery获取对象集合到ViewModel集合中(可以利用这个方法给作为前台视图页cshtml页面的@model 源)

    首先我们已经有了一个Model类: using System;using System.Data.Entity;using System.ComponentModel.DataAnnotations; ...

  3. 转:Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    public IEnumerable<Statistic> GetStatistics(IEnumerable<Guid> itemIds) { var ctx = new D ...

  4. [转]Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    本文转自:http://www.cnblogs.com/xchit/p/3334782.html 目前,EF对存储过程的支持并不完善.存在以下问题:        EF不支持存储过程返回多表联合查询的 ...

  5. Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    目前,EF对存储过程的支持并不完善.存在以下问题: EF不支持存储过程返回多表联合查询的结果集. EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况. 虽然可以正常导 ...

  6. EF中Database.SqlQuery

    本文转载:http://www.cnblogs.com/daimage/archive/2012/07/04/2575844.html EF中Database.SqlQuery<TElement ...

  7. EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

    一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbConte ...

  8. entity.Database.SqlQuery() 和entity.Database.SqlCommand()

    原文地址: http://msdn.microsoft.com/en-us/library/gg715124(v=vs.103) 使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在 ...

  9. 解决EF使用context.Database.SqlQuery时NotMapped属性列为空null的问题(转载)

    有时候我们要为EF中的Model加一个新属性,这个属性不是数据库中的字段,而是从其它表中关联出来的.EF中要标示一个列不是对应表中字段只需要加上NotMapped特性.要使用NotMapped,保证你 ...

随机推荐

  1. javafx教程大全

    链接: https://www.yiibai.com/javafx

  2. hive shell参数

    Hive Shell参数 1.Hive命令行 语法结构 hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e ...

  3. NX二次开发-UFUN设置工程图PNG图片高度UF_DRF_set_image_height

    #include <uf.h> #include <uf_drf.h> UF_initialize(); //插入PNG char* file_name = "D:\ ...

  4. NX二次开发-UFUN获取相邻面UF_MODL_ask_adjac_faces

    NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> UF_initialize( ...

  5. P1650 赛马

    P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负者这 ...

  6. 使用Docker在服务器上部署Ubuntu,本地传文件到docker

    使用Docker在服务器上部署Ubuntu,本地传文件到docker 作者:王佳乐 目录 安装Docker 安装Docker 全部安装流程: 登录服务器 ssh username@ip 检查是否已经安 ...

  7. 18-Ubuntu-文件和目录命令-创建文件和目录-touch和mkdir

    1.touch 创建文件或修改文件时间 (1)如果文件不存在,可以创建一个空白文件 例: 创建空白文件01.txt touch 01.txt (2)如果文件已经存在,可以修改文件的末次修改时间 例: ...

  8. IK分词器 原理分析 源码解析

    IK分词器在是一款 基于词典和规则 的中文分词器.本文讲解的IK分词器是独立于elasticsearch.Lucene.solr,可以直接用在java代码中的部分.关于如何开发es分词插件,后续会有文 ...

  9. iOS开发系列-Charles

    概述 Charles相当于一个插在服务器和客户端之间的"过滤器".当客户端向服务器发起请求的时候,先到charles进行过滤,然后charles在把最终的数据发送给服务器: 注意: ...

  10. dev设置子窗体的初始位置,grid控件表头的属性设置

    当在父窗体上弹出子窗体时,一般设置子窗体的初始位置是居中, //在需要展示子窗体的父窗体上写这段,注意必须设置在show方法之前Form2 f2 = new Form2(); f2.MdiParent ...