调用代码:

            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. Delphi操作ACCESS技巧集

    1.DELPHI中操作access数据库(建立.mdb文件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第二版无ACCESS环境下运行成功.//在之前us ...

  2. 2018-2019-2-20175323 java实验三敏捷开发与XP实践

    代码规范 安装alibaba插件 首先使用code栏里面的reformat code使代码的格式更加规范 再用编码规约扫描,alibaba把问题分为block/critical/major三个等级,出 ...

  3. natapp自动获取免费的动态端口域名

    前段时间,因为客户有个项目要求跨局域网进行远程控制桌面,想知道能不能实现.于是查询了许多资料,了解到需要有公网服务器作为中介才能够实现,但是公司又没有公网服务器,于是只有利用花生壳.natapp服务器 ...

  4. python数据结构之二叉树的统计与转换实例

    python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...

  5. Lunascape:将FireFox、Safari和IE合为一体的浏览器

    转自:http://blog.bingo929.com/lunascape-firefox-safari-ie-all-in-one.html 作为前端开发/网页设计师,电脑中总是安装着各种不同内核渲 ...

  6. 2018-12-25-C#-7.2-通过-in-和-readonly-struct-减少方法值复制提高性能

    title author date CreateTime categories C# 7.2 通过 in 和 readonly struct 减少方法值复制提高性能 lindexi 2018-12-2 ...

  7. ld.so和ld-linux.so* :动态链接器/加载器(转)

    概述 动态链接器可以被正在运行的动态链接程序或者动态对象(没有对动态链接器指定命令选项,动态链接器被存储在程序的.interp区域)间接调用,也可以直接运行程序, 例如:/lib/ld-linux.s ...

  8. android studio toolbar遮挡住下面控件内容

    只需要在该控件布局(content_***.xml)加入: app:layout_behavior="@string/appbar_scrolling_view_behavior" ...

  9. JS的十大经典算法

    冒泡排序(Bubble Sort) 冒泡排序须知: 作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉...冒泡排序还有一种优化算 ...

  10. Codeforces Round #563 (Div. 2) F. Ehab and the Big Finale

    后续: 点分治标程 使用father数组 比使用vis数组优秀(不需要对vis初始化) https://codeforces.com/problemset/problem/1174/F https:/ ...