5.Entity Framework Core 5.0 查询数据
EFCore主要是通过Linq这个方式查询数据库
1、查询所有数据
把Leagues里的所有数据查询出来
第一种形式
通过Linq方法.ToList(),EFCore遇到ToList()语句就会执行SQL查询,如果不加过滤条件的话就是把表里的所有数据查询出来
第二种形式
通过Linq查询表达式,查询结果与Linq方法是一样的
[HttpGet]
public IActionResult GetLeague() {//第一种形式 通过Linq方法var leagues = _dbContext.Leagues.ToList();//第二种形式 通过Linq查询表达式var league2 = (from lg in _dbContext.Leagues select lg).ToList();return Ok(leagues);
}
不加过滤条件查询所有数据没有什么意义
需要加一些查询条件
,查询条件怎么加呢?
第一种写法
在后面加一个Where()方法,里面的参数是一个Lambda表达式
第二种写法
在后面加where语句,这与sql语句有点类似
[HttpGet]
public IActionResult GetLeague()
{//第一种var leagues = _dbContext.Leagues.Where(l => l.Country == "中国")//查询条件.ToList();//只有执行ToList()方法才真正执行数据库查询//第二种var league2 = (from lg in _dbContext.Leagueswhere lg.Country == "中国"//查询条件select lg).ToList();return Ok(leagues);
}
通常在开发过程中都是使用第一种方法
延迟执行
在.ToList()方法之前都是返回IQueryable类型
IQueryable就是C#中Linq To SQL语句的返回类型,简单来说IQueryable就是可以叠加处理SQL语句,最后统一访问数据库,这个处理过程就叫
延迟执行
,这一步只是生成了SQL语句,并没有真正执行数据库查询
只有执行ToList()方法才真正执行数据库查询,这个ToList()方法之前都是可以多次叠加Where()方法
那么在什么情况下会执行数据库查询呢?
ToList()
、First()
、FirstOrDefault()
Single()
、SingleOrDefault()
、Last()
、LastOrDefault()
//Single只能是一个数据
Count()
、LongCount()
、Min()
、Max()
、Average()
、Sum()
Find()
、foreach()
还有异步版本:ToListAsync()
、FirstAsync()
First返回符合添加的第一条数据;First与FirstOrDefault的区别,First必须有数据,否则会报错,FirstOrDefault可有可无
foreach循环:遇到foreach语句EFCore会把数据库连接打开,然后连接一直处于开放状态,一直保持连接,直至foreach循环结束才关闭数据库连接,如果循环里执行比较耗时,可能就会出现一些异常或数据冲突,尽量不要这样写;应该先通过ToList(),然后对ToList的结果进行循环。
First()与FirstOrDefault()可以在方法参数里直接写Where查询条件
_dbContext.Leagues.FirstOrDefault(w => w.Country == "中国");
如果在代码中把查询条件写死了,生成的SQL语句也是写死的。如果把查询条件提取为变量,生成SQL语句就会使用参数类型
模糊查询
比如需要模糊sql查询条件
SELECT * FROM Leagues WHERE Country LIKE N'%中%'
//第一种 模糊查询
var leagues = _dbContext.Leagues.Where(l => l.Country.Contains("中"))//查询条件.ToList();
//第二种 模糊查询
var league_ef = _dbContext.Leagues.Where(l => EF.Functions.Like(l.Country, "中%")).ToList();
2、查询单个数据
[HttpGet]
public IActionResult GetSingleLeague()
{var _id = new Guid("4227506D-05E4-47A2-B94F-08D8451D5DC0");//第一种var leagues = _dbContext.Leagues.SingleOrDefault(l => l.Id == _id);//第二种var league2 = _dbContext.Leagues.Find(_id);return Ok(new { leagues, league2 });
}
根据执行情况来看,请求得到两个相同的对象leagues和league2,但是只执行了一条SQL语句。
因为第一种查询的时候生成了查询SQL语句,查询出来的数据被context进行追踪,如果使用DbSet<>()上的Find()方法执行查询,如果context追踪内存中能找到这条数据,就不用进行数据库查询,直接从内存中读取数据返回
如果把【第一种】和【第二种】两种方法返过来查询就会执行两次数据库查询操作。
如果想使用
Last()
方法查询语句,必须排序操作:正序.OrderBy(x=>x.Id)
,倒序.OrderByDescending(x=>x.Id)
5.Entity Framework Core 5.0 查询数据相关推荐
- Entity Framework Core 2.0的新特性
虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...
- Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- Entity Framework Core 2.0 全局查询过滤器
本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...
- Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布
Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容: Entity Framework Core 3.0 EF C ...
- Entity Framework Core 7.0 未来规划
Entity Framework Core 7.0(也称为 EF Core 7 或 EF7)的未来规划.该计划汇集了许多相关意见,并概述了微软打算在何处以及如何投资 EF7. IMPORTANT 此 ...
- Entity Framework Core 6.0 预览4 性能改进
起因 微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework ...
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...
- Entity Framework Core 2.0 使用入门
本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...
- Entity Framework Core 2.0 新特性
一.模型级查询过滤器(Model-level query filters) ef core2.0包含了一个新特性,我们叫他模型级查询过滤器(Model-level query filters).此特性 ...
最新文章
- android 8.0 Account行为变更 账号系统
- java 类一定要声明成public_类和对象练习题
- c#写字板实现加粗功能_Windows 7中写字板和绘画中的新功能
- EF Core 数据变更自动审计设计
- ora22813操作数值超出系统的限制_最新:华为“鸿蒙”操作系统终于面世!一旦遭到限制,将随时启用...
- 收藏 | 人脸检测之Retinaface
- django 钉钉扫码登录
- android之调用webservice实现图片上传
- 【转载】如何让外网访问IIS里面搭建的网站
- 笔记本装机软件+网站大合集+磁盘管理
- Linux嵌入式树莓派CUPS驱动打印机
- websphere7 mysql_websphere7
- 搜索引擎的高级搜索语法指令
- 我的中国“芯”——资深后端工程师成长分享——“胡”说IC工程师完美进阶
- 西门子博途1200码垛机、立体仓库程序(带注释),程序应用到 变频器、触摸屏、步进电机、工业机器人、视觉相机。
- 悖论对计算机科学影响,科学界最著名的几大悖论,你能解释吗?
- 案例 | 基于JMP Pro的Lasso及岭回归在水稻全基因组预测中的应用
- 科目一考试重难点速考笔记
- Homebrew error: Another active Homebrew process is already in progress
- SCS【12】单细胞转录组之评估不同单细胞亚群的分化潜能 (Cytotrace)
热门文章
- sysdig_Linux 监控和调试利器 Sysdig 入门教程
- oracle中select*的性能与全部字段查询 哪个性能好一点_性能优化技巧:TopN
- python datetime需要安装_【python从入门到入土】之第一行代码
- 最小生成树两种方法Prim+kruskal代码模板
- cocos2d-x 3.0对label的改进
- linux 微秒延时_Linux基础知识(Linux系统、Linux中的链表)
- winpcap java封装_利 用jnetpcap 封装libpcap
- C语言编程中 提取运行时间的函数,C语言中用于修改文件的存取时间的函数使用...
- php oauth单点登陆,php单点登录
- dirver时区_MySQL JDBC驱动程序5.1.33-时区问题