文档章节

EF获取多个数据集以及MySQL分页数据查询优化

o
 osc_y8yehimr
发布于 2019/03/20 15:04
字数 372
阅读 18
收藏 0

精选30+云产品,助力企业轻松上云!>>>

背景:MySQL分页查询语句为

SELECT * FROM TABLE LIMIT 0,10;

一般页面还会获取总条数,这时候还需要一条查询总条数语句

SELECT COUNT(*) FROM TABLE LIMIT 0,10

这样数据库需要执行两次查询操作。MySQL提供了SQL_CALC_FOUND_ROWS追踪总条数的函数,FOUND_ROWS取得总条数。

SELECT SQL_CALC_FOUND_ROWS * FROM TABLE LIMIT 0,10;
SELECT FOUND_ROWS();

上面SQL语句虽然有两个结果集,但只查询一次数据库,可以提升效率。

在asp.net mvc项目中,ORM仅仅使用EF的话,处理两个结果集就有些复杂,下面这段代码可以解决

 1 /// <summary>
 2 /// 获取分页数据以及总条数(EF获取多个数据集)
 3 /// </summary>
 4 /// <typeparam name="T">实体类</typeparam>
 5 /// <param name="sql">SQL语句(分页查询+SELECT FOUND_ROWS查询)</param>
 6 /// <param name="parameters">SQL参数</param>
 7 /// <param name="db">数据库上下文</param>
 8 /// <param name="queryData">返回数据</param>
 9 /// <param name="rowCount">总行数</param>
10 /// <param name="needReturnTotal">是否需要返回总行数</param>
11 public void GetQueryDataAndRowCount<T>(string sql, List<MySqlParameter> parameters, DbContext db, out List<T> queryData, out int rowCount, bool needReturnTotal = true)
12 {
13     var data = new List<T>();
14     var count = 0;
15     try
16     {
17         var cmd = db.Database.Connection.CreateCommand();
18         cmd.CommandText = sql;
19         if (parameters.Count > 0)
20         {
21             cmd.Parameters.AddRange(parameters.ToArray());
22         }
23         db.Database.Connection.Open();
24         var reader = cmd.ExecuteReader();
25         if (reader.HasRows)
26         {
27             data = ((IObjectContextAdapter)db).ObjectContext.Translate<T>(reader).ToList();
28             if (needReturnTotal)
29             {
30                 reader.NextResult();
31                 count = ((IObjectContextAdapter)db).ObjectContext.Translate<int>(reader).FirstOrDefault();
32             }
33         }
34     }
35     finally
36     {
37         db.Database.Connection.Close();
38     }
39     queryData = data;
40     rowCount = count;
41 }
View Code

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
WinForm EF+MySql企业管理软件C/S项目实战演练

一、课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类。这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合。一位伟大的讲师曾经说过一句话:事物存在即合理!录制这...

osc_bgoqj0sj
2019/02/14
11
0
分享自己写的基于Dapper的轻量级ORM框架~

1、说明 本项目是一个使用.NET Standard 2.0开发的,基于 Dapper 的轻量级 ORM 框架,包含基本的CRUD以及根据表达式进行一些操作的方法,目前只针对单表,不包含多表连接操作。github:https...

osc_yny7gjj7
2018/08/28
5
0
ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

原文:ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门 一、前言 1、本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF C...

osc_cleyftyz
2019/03/29
2
0
【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现

前言 通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口。这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方。 1. 添加EF Core 先在数...

osc_vuklrt7s
06/10
4
0
ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

一、前言 1、本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity 访问MySQL数据库 ASP.NET Core MVC 使用 EF Core + 原生SQL访问...

osc_lrhgywny
2018/12/29
2
0

没有更多内容

加载失败,请刷新页面

加载更多

平时使用的Lszrz到底是什么协议?说说Xmodem/Ymodem/Zmodem

XMODEM, YMODEM, and ZMODEM 由于平时使用rz/sz较多,r/s好理解,一个send一个receive。但是由不太清楚z是什么意思,故有此文。 sx/rx, sb/rb (b=batch)和sz/rz分别实现了xmodem,ymodem和z...

独钓渔
31分钟前
17
0
真正的强智能时代已经到来。道翰天琼认知智能机器人平台API大脑。

最近,我常说人工智能的寒冬快要来了,提醒业界要做好思想准备,但同时我也说:冬天来了,春天就不会远了…… 2019年6月我写了篇文章《深度学习的问题究竟在哪?》,说到深度学习的一个主要问...

jackli2020
40分钟前
24
0
什么是控制型人格,控制型人格的筛查测试

一、 什么是控制性人格 拥有控制型人格的人,他们会尽力的隐藏自己的意图,但是又会使用很微妙的方式来利用周围人的弱点,进而占取便宜时,使他们能够得到自己想要的东西。这类人的控制欲非常...

蛤蟆丸子
49分钟前
14
0
【Spring】Spring AOP 代理对象生成逻辑源码分析

1. spring aop案例(POJO注入) 1.0 被代理接口 TargetInterface /** * 被代理的接口 * @author Yang ZhiWei */public interface TargetInterface { void show(); String show......

ZeroneLove
58分钟前
36
0
聊聊dubbo-go的gracefulShutdownFilter

序 本文主要研究一下dubbo-go的gracefulShutdownFilter gracefulShutdownFilter dubbo-go-v1.4.2/filter/filter_impl/graceful_shutdown_filter.go type gracefulShutdownFilter struct {......

go4it
59分钟前
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部