日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

EF Core 3.0查询

發(fā)布時(shí)間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EF Core 3.0查询 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

隨著.NET Core 3.0的發(fā)布,EF Core 3.0也隨之正式發(fā)布,關(guān)于這一塊最近一段時(shí)間也沒(méi)太多去關(guān)注,陸續(xù)會(huì)去對(duì)比之前版本有什么變化沒(méi)有,本節(jié)我們來(lái)看下兩個(gè)查詢。

分組

我們知道在EF Core 3.0版本之前,對(duì)于分組查詢是在客戶端評(píng)估,也就是說(shuō)在內(nèi)存中操作,在EF Core 3.0版本后對(duì)于分組查詢可以翻譯成SQL在數(shù)據(jù)庫(kù)進(jìn)行,但是事實(shí)情況真的是這樣嗎?接下來(lái)我們來(lái)看下吧,如下給出代碼例子。

接下來(lái)我們?cè)诳刂婆_(tái)進(jìn)行如下查詢:

上述我們查詢每一篇博客的文章數(shù)組,我們通過(guò)SQL Profiler跟蹤到上述示例代碼最終翻譯成的SQL如我們所期望的那樣,如下圖:

假設(shè)現(xiàn)在有這樣一個(gè)場(chǎng)景:查詢所有博客發(fā)表的第一篇博客文章。基于這種場(chǎng)景我們需要對(duì)發(fā)表博客文章進(jìn)行分組,然后取第一篇,所以接下來(lái)我們進(jìn)行如下查詢:

既然這樣無(wú)法翻譯,根據(jù)官方文檔可以使用Linq to Object進(jìn)行查詢《https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/》 ,那么我們就修改成如下代碼查詢看看:

咋客戶端都無(wú)法支持了呢?我們只是想查詢所有博客列表中第一篇文章,按照我們的理解,理論上是可以進(jìn)行翻譯的對(duì)不對(duì),比如翻譯成如下直接寫(xiě)的SQL語(yǔ)句:

所以到這里我們大概可以猜測(cè)出EF Core對(duì)分組查詢支持的并不是那么好,目前應(yīng)該只支持簡(jiǎn)單的分組求和而已,稍微復(fù)雜一點(diǎn)則無(wú)法翻譯,所以我們還是老老實(shí)實(shí)將分組還是完全放在客戶端評(píng)估吧,如下:

查找

我們可以通過(guò)EF.Functions.Like來(lái)進(jìn)行模糊查詢,我們可以通過(guò)StartWith或EndWith來(lái)查詢開(kāi)頭或結(jié)尾的數(shù)據(jù),要是現(xiàn)在需要查詢出博客文章標(biāo)題中包含某一字符的文章列表,我們又該如何查詢呢?我們想到通過(guò)IndexOf來(lái)查詢,接下來(lái)我們來(lái)看看:

難道我們又只能將所有查詢出來(lái),然后在內(nèi)存中操作嗎?代碼如下:

其實(shí)我們只要將上述單引號(hào)修改雙引號(hào)即可解決完全在客戶端評(píng)估的問(wèn)題,如下:

根據(jù)我們的查詢描述,我們明明是想查詢?cè)跇?biāo)題中查詢指定字符,為何對(duì)字符不能支持,只支持字符串呢,不知道官方是出于何種原因。同時(shí)這里我們也注意到,無(wú)論是MySQL還是SQL Server等等,盡量不要將表中列設(shè)置為可空,即使是可空也要設(shè)置為不可空,給定一個(gè)默認(rèn)值即可,一旦數(shù)據(jù)量巨大時(shí),會(huì)發(fā)現(xiàn)查詢很慢,因?yàn)橥ㄟ^(guò)IS NULL或者IS NOT NULL不走索引導(dǎo)致。比如上述我們查詢的Title,我們無(wú)論是通過(guò)Data Annotations還是Fluent Api,都必須配置成不可空,比如這里我們通過(guò)Data Annotations配置如下:

此時(shí)我們繼續(xù)進(jìn)行上述查詢時(shí)候,會(huì)發(fā)現(xiàn)對(duì)空值的判斷已經(jīng)沒(méi)有了,同時(shí)也減少了查詢語(yǔ)句,如下:

請(qǐng)注意上述我所演示EF Core版本為3.0.1。本節(jié)我也只是通過(guò)簡(jiǎn)單的示例稍微給大家看了EF Core 3中一些小的問(wèn)題,當(dāng)然可能還存在其他的問(wèn)題,更多細(xì)節(jié)等我后續(xù)研究會(huì)繼續(xù)給出EF Core 3.x系列文章,感謝您的閱讀,若有敘述不當(dāng)或錯(cuò)誤之處,還望指正,謝謝。

總結(jié)

以上是生活随笔為你收集整理的EF Core 3.0查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。