3種重構EF Linq查詢的方法而不扼殺效能

2021-09-27 04:22:16 字數 1197 閱讀 2195

目錄

列舉《問題》

返回解決方案[0]

但等等,還有更多

或是linqkit? 總結

從實體框架

linq

查詢中提取方法會悄然扼殺效能。這裡有三個簡單的解決方案,包括:表示式,擴充套件方法和

linqkit。

上週,我驚訝地發現通過提取方法重構實體框架

linq

查詢的可讀性或可重用性會悄悄地將查詢從

sql交換到記憶體中處理並扼殺效能。

這是我的問題的簡化版本。

private async task> getusersmatching(imainfilterdto filter, string prefix)

我有乙個由前端提供的站點範圍的過濾物件,但是之後我需要做一些特定於手頭任務的其他事情,比如

.startswith()。

然後在別處,我需要一些非常類似的東西

private async task> getuserswithoutroles(imainfilterdto filter)

呃。兩者之間的共同**不是

dry,而且感覺很糟糕。如果我需要去改變它,也許通過用

>=

更換》,我要找出所有與該**一樣的地方。我很想提取它:

並像這樣使用它:

private async task> getuserswithoutroles(imainfilterdto filter)

執行方式如下:

private async task> getusersmatching(imainfilterdto filter, string prefix)

}

private async task> getusersmatching(imainfilterdto filter, string prefix)

private task> getusersmatching(imainfilterdto filter, string prefix)

很漂亮。

如果我不需要任何更複雜的東西,我喜歡第一種方法,但無論如何,確定如何不重構

linq

mysql重構 MySQL重構查詢的方式

在優化有問題的查詢時,目標應該是找到乙個更優的方法獲得實際需要的結果 而不一定總要從mysql獲取一模一樣的結果集。有時候可以查詢轉換一種寫法讓其返回一樣的結果,但是效能更好。但也可以通過修改應用 用另一種方式完成查詢,最終達到一樣的目的。這裡我們將介紹如何通過這種方式來重構查詢,並展示合適需要使用...

查詢演算法 3種

思路分析 1.首先需要確定該陣列的中間下標 2.讓需要查詢的數 findval 和 arr mid 比較 結束遞迴的條件 1.找到就結束遞迴 2.遞迴完整個陣列,仍沒有找到,也需要結束遞迴,當left right 就需要退出 實現 第乙個方法適用於陣列中只有乙個待查詢的結果 第二個方法適用於陣列中有...

重構查詢的方式

在設計查詢的時候,應該設計乙個複雜查詢還是多個簡單查詢呢?傳統實現中,總是強調要在資料庫層完成盡可能多的工作,這樣做是因為以前總是認為網路通訊 查詢解析和優化是一件代價很高的事情。但是這樣的想法對mysql並不適用。mysql執行多個小查詢已經不是問題。理由包括,1,mysql的連線和斷開都很輕量級...