IEnumerable與IQueryable的差別,我已經被問過N次了
IEnumerable:
取出當前符合條件的所有資料後,在記憶體中進行後續的資料篩選
IQueryable:
會保存所有條件限制於Query Expression中,直到資料真正被列舉成具體資料的當下,才將最終的Query Expression透過Query Provider轉換為實際執行的SQL語法,從DB取出符合條件資料。
講白話一點就是,你下同樣的條件式
var result = Table.AsEnumerable().Where(x=> x.ID == 1).ToList(); var result = Table.AsQueryable().Where(x=> x.ID == 1).ToList();
上面兩行取出來的結果是一樣的,但是取的過程完全不一樣
IEnumerable會在您ToList的時候先取出Table的所有資料存到記憶體中
再去從記憶體中的資料下條件式(where)取出
也就是你Table有10萬筆資料,他會先把10萬筆存到記憶體中,再去撈ID=1得到的結果
所以你Table有上百萬筆,千萬別用IEnumerable來取資料您會GG
IQueryable會在您ToList的時候,他會包含WHERE條件式送給SQL SERVER取要得資料
適用時機
IEnumerable: 處理記憶體內的資料 ex. List / Array
IQueryable: 處理遠端來源的資料 ex. Database / Service
參考網址:
https://dotblogs.com.tw/wasichris/archive/2015/03/04/150633.aspx
沒有留言:
張貼留言