2017年12月6日 星期三

Entity Framework IEnumerable與IQueryable差異比較

若您有在使用Entity Framework的話,你去面試很多面試官都會問
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



沒有留言:

張貼留言