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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EF Core 3.0查询

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

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

分組

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

接下來我們在控制臺進行如下查詢:

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

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

既然這樣無法翻譯,根據(jù)官方文檔可以使用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來查詢開頭或結尾的數(shù)據(jù),要是現(xiàn)在需要查詢出博客文章標題中包含某一字符的文章列表,我們又該如何查詢呢?我們想到通過IndexOf來查詢,接下來我們來看看:

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

其實我們只要將上述單引號修改雙引號即可解決完全在客戶端評估的問題,如下:

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

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

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

總結

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

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