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 查询数据相关推荐

  1. Entity Framework Core 2.0的新特性

    虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...

  2. Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  3. Entity Framework Core 2.0 全局查询过滤器

    本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...

  4. 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 ...

  5. Entity Framework Core 7.0 未来规划

    Entity Framework Core 7.0(也称为 EF Core 7 或 EF7)的未来规划.该计划汇集了许多相关意见,并概述了微软打算在何处以及如何投资  EF7. IMPORTANT 此 ...

  6. Entity Framework Core 6.0 预览4 性能改进

    起因 微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework  ...

  7. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

  8. [转帖]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 ...

  9. Entity Framework Core 2.0 使用入门

    本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...

  10. Entity Framework Core 2.0 新特性

    一.模型级查询过滤器(Model-level query filters) ef core2.0包含了一个新特性,我们叫他模型级查询过滤器(Model-level query filters).此特性 ...

最新文章

  1. android 8.0 Account行为变更 账号系统
  2. java 类一定要声明成public_类和对象练习题
  3. c#写字板实现加粗功能_Windows 7中写字板和绘画中的新功能
  4. EF Core 数据变更自动审计设计
  5. ora22813操作数值超出系统的限制_最新:华为“鸿蒙”操作系统终于面世!一旦遭到限制,将随时启用...
  6. 收藏 | 人脸检测之Retinaface
  7. django 钉钉扫码登录
  8. android之调用webservice实现图片上传
  9. 【转载】如何让外网访问IIS里面搭建的网站
  10. 笔记本装机软件+网站大合集+磁盘管理
  11. Linux嵌入式树莓派CUPS驱动打印机
  12. websphere7 mysql_websphere7
  13. 搜索引擎的高级搜索语法指令
  14. 我的中国“芯”——资深后端工程师成长分享——“胡”说IC工程师完美进阶
  15. 西门子博途1200码垛机、立体仓库程序(带注释),程序应用到 变频器、触摸屏、步进电机、工业机器人、视觉相机。
  16. 悖论对计算机科学影响,科学界最著名的几大悖论,你能解释吗?
  17. 案例 | 基于JMP Pro的Lasso及岭回归在水稻全基因组预测中的应用
  18. 科目一考试重难点速考笔记
  19. Homebrew error: Another active Homebrew process is already in progress
  20. SCS【12】单细胞转录组之评估不同单细胞亚群的分化潜能 (Cytotrace)

热门文章

  1. sysdig_Linux 监控和调试利器 Sysdig 入门教程
  2. oracle中select*的性能与全部字段查询 哪个性能好一点_性能优化技巧:TopN
  3. python datetime需要安装_【python从入门到入土】之第一行代码
  4. 最小生成树两种方法Prim+kruskal代码模板
  5. cocos2d-x 3.0对label的改进
  6. linux 微秒延时_Linux基础知识(Linux系统、Linux中的链表)
  7. winpcap java封装_利 用jnetpcap 封装libpcap
  8. C语言编程中 提取运行时间的函数,C语言中用于修改文件的存取时间的函数使用...
  9. php oauth单点登陆,php单点登录
  10. dirver时区_MySQL JDBC驱动程序5.1.33-时区问题