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!=)
{
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完成分页封装的更多相关文章
- oracle Entity db.Database.SqlQuery ORA-01843: 无效的月份
原因是oracle的日期格式化格式和本地语言环境的日期格式不一致导致的. 一般情景为oralce格式为英文格式 本地服务器或者开发机的环境为中文环境. 使用Dbcontext 实例一般不会有问题. 但 ...
- MVC5 DBContext.Database.SqlQuery获取对象集合到ViewModel集合中(可以利用这个方法给作为前台视图页cshtml页面的@model 源)
首先我们已经有了一个Model类: using System;using System.Data.Entity;using System.ComponentModel.DataAnnotations; ...
- 转:Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数
public IEnumerable<Statistic> GetStatistics(IEnumerable<Guid> itemIds) { var ctx = new D ...
- [转]Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数
本文转自:http://www.cnblogs.com/xchit/p/3334782.html 目前,EF对存储过程的支持并不完善.存在以下问题: EF不支持存储过程返回多表联合查询的 ...
- Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数
目前,EF对存储过程的支持并不完善.存在以下问题: EF不支持存储过程返回多表联合查询的结果集. EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况. 虽然可以正常导 ...
- EF中Database.SqlQuery
本文转载:http://www.cnblogs.com/daimage/archive/2012/07/04/2575844.html EF中Database.SqlQuery<TElement ...
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为 -1 ,sqlserver 里面 还没有测试过 using (var ctx = new MyDbConte ...
- entity.Database.SqlQuery() 和entity.Database.SqlCommand()
原文地址: http://msdn.microsoft.com/en-us/library/gg715124(v=vs.103) 使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在 ...
- 解决EF使用context.Database.SqlQuery时NotMapped属性列为空null的问题(转载)
有时候我们要为EF中的Model加一个新属性,这个属性不是数据库中的字段,而是从其它表中关联出来的.EF中要标示一个列不是对应表中字段只需要加上NotMapped特性.要使用NotMapped,保证你 ...
随机推荐
- java web 在tomcat没有正常输出
目录 文章背景 目录 问题介绍 问题解决 说明 参考文章 版本记录 文章背景 调试程序时候突然发现一些位置设置的日志输出没有了,最后总算是解决了! 目录 问题介绍 本地运行时候的环境如下: windo ...
- [JZOJ 5697] 农场
题目大意:将 n 个数 ai分成若干连续的段,使得每段的和都相等,求最多可以分成多少段. 思路: 考虑ai的和为sum,那么每一段的和就是约数. 对于每一个d,考虑其是否合法. 1e6之内用桶统计不会 ...
- Spring-Security (学习记录二)--修改为自己的登录页面
目录 1.修改spring-security.xml配置文件 2.增加login.jsp页面 3.重启项目即可看到效果 1.修改spring-security.xml配置文件 <!-- auto ...
- 20140401 cudaHOG代码
1.cudaHOG代码(删减没有必要的目录) cudaHOGDetect需要boost库:boost_date_time-vc100-mt-1_40.lib VC++目录->附加库目录D:\bo ...
- C#中ORM的简单实现
ORM在功能上主要有两个: 把从数据库中查询返回的DataSet,DataTable转化为我们可以方便使用的实体类集合: 把要对数据库操作的实体类集合或条件转化为数据库可以直接执行的SQL语句.
- 【校OJ】选网线
暑假学校OJ上的题目. 一道很有意思的二分. 题意:三个数组,每个数组各选一个数出来看是否能组成目标数. 题解:前两个数组两两的和组合一下,二分第三个数组,找是否能组成目标数. 代码: #includ ...
- java面试官如何面试别人
java面试官如何面试别人(一) j ...
- netty UnpooledHeapByteBuf 源码分析
UnpooledHeapByteBuf 是基于堆内存进行内存分配的字节缓冲区,没有基于对象池技术实现,这意味着每次I/O的读写都会创建一个新的UnpooledHeapByteBuf,频繁进行大块内存的 ...
- 几个实用的js函数
在阅读JavaScript DOM编程艺术这本书时看到了一些比较实用的代码. //加载多个window.onload事件 function addLoadEvent(func) { var oldon ...
- 笔记:简单的面向对象-web服务器
import socket import re import multiprocessing import time import mini_frame class WSGIServer(object ...