调用代码:

            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. 57 c++ 读取二进制文件: 以.raw后缀的TDF_Voxel_Size文件为例

    0 引言 毕业设计中用到了.raw格式的文件,需要将该文件按照M*N*P的矩阵格式加载到内存中.采用 #include <fstream> 中的FILE* 加载,并针对数据占用字节数,以 ...

  2. luoguP3951 小凯的疑惑/P2662 牛场围栏

    其实就是当年sxy给我讲的墨墨的等式,只是当时比较菜听得似懂非懂. 小凯的疑惑 去年noipday1t1,当时随便猜了个结论结果猜对了,现在瞎证一下,答案是a*b-a-b. 设a为a,b中较小的一个, ...

  3. Python中的动态类

    Python中的动态类 有这样一个需求,我有SegmentReader.PostagReader.ConllReader这三个Reader,他们都继承于一个Reader类.在程序运行中,由用户通过se ...

  4. jquery preventDefault()事件

    定义和用法 preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 语法 event.preventDefault() 参数 描述 event 必需. ...

  5. [17]APUE:线程

    通常情况下,线程模型的并发性能优于进程模型,但不总是这样 线程的优势: 线程的创建.销毁及上下文切换代价比进程低 某些情况下,使用线程可以简化逻辑,避免异步编程的复杂性 同一进程内所有线程共享全局内存 ...

  6. KNN 实战

    KNN算法很简单,大致的工作原理是:给定训练数据样本和标签,对于某测试的一个样本数据,选择距离其最近的k个训练样本,这k个训练样本中所属类别最多的类即为该测试样本的预测标签.简称kNN.通常k是不大于 ...

  7. 01->OpenGL 实验环境配置(glut)及简单实例

    --  简介  -- OpenGL是通过数学等理论知识定义3D或2D模型,由计算机通过流水线渲染技术进行渲染,产生逼真的场景图像,电影和游戏中的特效都有用到.每每看到精美的画面,真想自己也能做出如此作 ...

  8. Spring注解基础学习总结

    1.依赖注入注解: @Component:Bean注入到Spring容器组件(通用) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE):Bean作用域( ...

  9. Ubuntu18.04安装RTX2080Ti+NVIDIA驱动+CUDA

    Ubuntu18.04安装RTX 2080Ti 与 Cuda10 ==========血泪更新========= 如果可以使用ppa安装最方便了 具体参考:https://www.cnblogs.co ...

  10. gcc 4步编译过程

    一. gcc编译过程  1. 预处理: 主要进行宏替换以及头文件的展开  gcc  -E   *.c  -o  *.i 2.  编译::编译生成汇编文件,会检查语法错误   gcc  -S   *.i ...