EFCore正確姿勢之使用where查詢

2021-10-10 12:35:47 字數 2056 閱讀 2072

好了,直接進入正題, 我們在使用ef/efcore時,

iqueryable

where

<

tsource

>

(this iqueryable source, expressionbool

>

> predicate)

where的靈活性和不可避開性,我們不得不深入**它和尊重它的存在。我們都喜歡使用where來做自己通用方法的封裝,已是常見有類似這樣的方法封裝:

ienumerable

find

(expressionbool

>

> predicate)

; or

task

>

findasync

(expressionbool

>

> predicate)

;

這很正常,也很好,因為這樣能讓我們動態傳入lambda表示式的靈活性。我們可以這樣呼叫:

var matches = _context.students.

find

(m=>m.yourcolumn == yourvalue...

);

如果你這樣做了,那麼恭喜你,因為你會很順利的編譯通過並快速返回結果值。如下是糟糕的呼叫方式:

private

bool

dynamicparams

(studentinfo model,

requestmodel request)

if(model.teltype ==

999|| model.teltype ==0)

if(model.starttime != model.endtime)

} 。。。。。。

後面還有很多條件要判斷呀。。。

}var matches = _context.yourtables.

find

(m=>

dynamicparams

(studentmodel,requestmodel)

);

這是乙個提供給前端分頁列表頁面呼叫的介面,因為前端傳過來的是多條件查詢,引數有多有少,引數值是空值或有值,為了適應該功能,於是封裝了dynamicparams來滿足功能的需要。

然而,我勸你還是做好正確的ef使用姿態,多看看官方描述的重要提示和警告做法,不要任憑自己的所想所思去寫**。實際上你會發現,上述問題就出在將m=>dynamicparams(studentmodel,requestmodel)作為表示式呼叫而導致資料全盤查詢出來,然後再逐行過濾滿足dynamicparams內的條件後的資料。你應明白一次從資料表中查詢出20w需要消耗多少效能,且你還從這20w的資料中再逐行過濾出滿足你想要的資料!這是非常糟糕的,你要意識到你的無知和愚蠢,與ef沒關係,用不著對你的面試者說ef什麼什麼的。。。

最初我們發現更糟糕的:很多公司的專案中,他們封裝的是這樣的方法:

ienumerable

find

(funcbool

> predicate)

; or

task

>

findasync

(funcbool

> predicate)

;

不用說,封裝成這樣作為公共方法提供給別人呼叫的人,你是災難的創造者,後面導致這個專案大崩潰的罪人應是你,而不是跟你一起開發的人。

現在,讓我們來正確意識ef/efcore中where的正確姿勢:應是expression> predicate作為表示式,而不是funcpredicate。任何情況下都不應偷懶,將類似dynamicparams的封裝作為表示式傳入。

本文只討論where使用,可謂是ef/efcore中的冰山一角,更多正確姿勢請多加閱讀官方文件並實踐出真知,而不是人云亦云。記住一點:微軟一出品,必屬精品!.net開發者最新獲取知識和懂得知識的無非是官方東西,如果你做專案時,以官方東西優先,那麼你好更好招人,並更好做出穩定的產品,亦或能減少加班加點做更多更快的產品。

shape使用正確姿勢

android中常常使用shape來定義控制項的一些顯示屬性,今天看了一些shape的使用,對shape有了大體的了解,稍作總結 先看下面的 solid 實心,就是填充的意思 android color指定填充的顏色 gradient 漸變 android startcolor和android en...

Java日誌正確使用姿勢

前言 關於日誌,在大家的印象中都是比較簡單的,只須引入了相關依賴包,剩下的事情就是在專案中 盡情 的列印我們需要的資訊了。但是往往越簡單的東西越容易讓我們忽視,從而導致一些不該有的bug發生,作為一名嚴謹的程式設計師,怎麼能讓這種事情發生呢?所以下面我們就來了解一下關於日誌的那些正確使用姿勢。正文 ...

Java日誌正確使用姿勢

前言 關於日誌,在大家的印象中都是比較簡單的,只須引入了相關依賴包,剩下的事情就是在專案中 盡情 的列印我們需要的資訊了。但是往往越簡單的東西越容易讓我們忽視,從而導致一些不該有的bug發生,作為一名嚴謹的程式設計師,怎麼能讓這種事情發生呢?所以下面我們就來了解一下關於日誌的那些正確使用姿勢。正文日...