EF Core 3.0查询

随着.NET Core 3.0的发布,EF Core 3.0也随之正式发布,关于这一块最近一段时间也没太多去关注,陆续会去对比之前版本有什么变化没有,本节我们来看下两个查询。

分组

我们知道在EF Core 3.0版本之前,对于分组查询是在客户端评估,也就是说在内存中操作,在EF Core 3.0版本后对于分组查询可以翻译成SQL在数据库进行,但是事实情况真的是这样吗?接下来我们来看下吧,如下给出代码例子。

接下来我们在控制台进行如下查询:

上述我们查询每一篇博客的文章数组,我们通过SQL Profiler跟踪到上述示例代码最终翻译成的SQL如我们所期望的那样,如下图:

假设现在有这样一个场景:查询所有博客发表的第一篇博客文章。基于这种场景我们需要对发表博客文章进行分组,然后取第一篇,所以接下来我们进行如下查询:

既然这样无法翻译,根据官方文档可以使用Linq to Object进行查询《https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/》 ,那么我们就修改成如下代码查询看看:

咋客户端都无法支持了呢?我们只是想查询所有博客列表中第一篇文章,按照我们的理解,理论上是可以进行翻译的对不对,比如翻译成如下直接写的SQL语句:

所以到这里我们大概可以猜测出EF Core对分组查询支持的并不是那么好,目前应该只支持简单的分组求和而已,稍微复杂一点则无法翻译,所以我们还是老老实实将分组还是完全放在客户端评估吧,如下:

查找

我们可以通过EF.Functions.Like来进行模糊查询,我们可以通过StartWith或EndWith来查询开头或结尾的数据,要是现在需要查询出博客文章标题中包含某一字符的文章列表,我们又该如何查询呢?我们想到通过IndexOf来查询,接下来我们来看看:

难道我们又只能将所有查询出来,然后在内存中操作吗?代码如下:

其实我们只要将上述单引号修改双引号即可解决完全在客户端评估的问题,如下:

根据我们的查询描述,我们明明是想查询在标题中查询指定字符,为何对字符不能支持,只支持字符串呢,不知道官方是出于何种原因。同时这里我们也注意到,无论是MySQL还是SQL Server等等,尽量不要将表中列设置为可空,即使是可空也要设置为不可空,给定一个默认值即可,一旦数据量巨大时,会发现查询很慢,因为通过IS NULL或者IS NOT NULL不走索引导致。比如上述我们查询的Title,我们无论是通过Data Annotations还是Fluent Api,都必须配置成不可空,比如这里我们通过Data Annotations配置如下:

此时我们继续进行上述查询时候,会发现对空值的判断已经没有了,同时也减少了查询语句,如下:

请注意上述我所演示EF Core版本为3.0.1。本节我也只是通过简单的示例稍微给大家看了EF Core 3中一些小的问题,当然可能还存在其他的问题,更多细节等我后续研究会继续给出EF Core 3.x系列文章,感谢您的阅读,若有叙述不当或错误之处,还望指正,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据…

C++模版和C#泛型求同存异录(一)sizeof(T)

sizeof(T)从C的模板代码往C#代码移植的时候发现了一个小问题。在C模板代码中 sizeof(T)是一种有效的写法,最终在会编译器展开成sizeof(int),sizeof(float)或者sizeof(myclass),然后在运行时这个代码是有效的,能够执行的。于是我们看上去就可以计算在运行…

经典排序算法(2)——快速排序算法详解

快速排序(Quick Sort)也是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 快速排序的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其…

经典排序算法(3)——直接插入排序算法详解

直接插入排序(Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序。 一、算法基本思想 (1)基本思想 直接插入排序的基本思想是:顺序地把待排序的序列中的各个元素按其关键字…

[ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?

标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题。这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期。一、问题重现我们通过一个简单的实例来模拟该同事遇到的问题。我们采用极简的方式创建了如…

经典排序算法(4)——折半插入排序算法详解

折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找。 一、算法基本思想 (1)基本思想 折半插入排序的基本思想是&#x…

经典排序算法(5)——希尔排序算法详解

希尔排序(Shell Sort)是一种典型的插入排序算法,通过对原始序列进行分组进行排序。 一、算法基本思想 (1)基本思想 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的…

程序员修神之路--容器技术为什么会这么流行(记得去抽奖)

菜菜哥,你上次讲的kubernetes我研究了一下,你再给我讲讲docker呗docker可很流行呀kubernetes是容器编排技术,容器不就是指的docker吗?docker可不等于容器哦,docker只算是容器的一种吧,算了容器的典型代表容…

经典排序算法(6)——直接选择排序算法详解

直接选择排序(Straight Select Sort)是一种典型的选择排序算法,通过不断选择序列中最大(小)的元素。 一、算法基本思想 (1)基本思想 直接选择排序的基本思想就是:不断从未排序队列中…

一篇文章看懂Git是什么以及如何简单的上手Git

本文来自DotNET技术圈作者:显杰1.Git是什么Git是目前世界上最先进的分布式版本控制系统什么是版本控制系统?好比设计师从开始设计第一个版本的设计稿开始:Demo > Demo1 > Demo2 > ... >Demo1001 > Demo最终版本 > Demo最终…

[翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构

作者:Samuele RescaServerless 技术为开发人员提供了一种快速而独立的方式将实现投入生产。这种技术在企业的技术栈中日益流行,自 2017 年以来,它一直是 ThoughtWorks 技术雷达的实验级别的技术[译注:技术雷达是 ThoughtWorks 每半…

经典排序算法(7)——堆排序算法详解

堆排序(Heap sort)是指利用堆(最大堆、最小堆)这种数据结构所设计的一种排序算法。堆是一个完全二叉树的结构,并同时满足如下性质:即子结点的键值或索引总是小于(或者大于)它的父节点…

经典排序算法(8)——归并排序算法详解

归并排序(Merge sort),是创建在归并操作上的一种有效的排序算法,效率为O(nlog n)。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。 一、算法基本思…

祝贺王远当选为中国区第二位 Teams MVP

今天一上班就传来喜讯,Microsoft Teams 大中华区技术社区专家委员会成员之一的王远成功当选了2020-2021年度微软最有价值专家(MVP),这是对他在基于Office 365的音视频会议系统(尤其是在Microsoft Teams)方面的深入研究…

经典排序算法(9)——桶排序算法详解

桶排序(Bucket sort)或所谓的箱排序,并不是比较排序,它不受到 O(nlogn) 下限的影响。 一、算法基本思想 (1)基本思想 桶排序工作的原理是将数组分到有限数量的桶子里,每个桶子再个别排序&#x…

[原]排错实战——使用process explorer替换任务管理器

前言 一般,我们会使用任务管理器查看系统中有哪些进程在运行,强制杀掉某个进程。可是系统自带的任务管理器功能有限,process explorer是一个功能更强大的工具。它可以让我们查看更多更详细的信息( 比如查看某个进程的父进程&#…

ABP vNext中使用开源日志面板 LogDashboard

ABP vNext 使用 logdashboard本文示例源码:https://github.com/liangshiw/LogDashboard/tree/master/samples/abpvnextABPABP是aspnetcore3.0的开源web应用程序框架,非常适合现代web应用程序。有关ABP的更多内容可以查看官方文档Logdashboard可以直接在基…

经典排序算法(10)——基数排序算法详解

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 一、算法基本思想 (1)基本思想 基数排序是基于桶排序来实现。通过键值的部分信息&#…

经典排序算法(11)——计数排序算法详解

计数排序(Counting sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(nk)(其中k是整数的范围),快于任何比较…

GitHub Actions,卧槽!牛批!

“ 阅读本文大概需要 19 分钟。 ”前段时间我更新了我的分布式爬虫管理框架—— Gerapy(话都说到这儿了打个广告,跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!,哇,哇,就是,哇…