天天看點

IEnumerable和IQueryable在使用時的差別

最近在調研資料庫查詢時因使用IEnumerable進行Linq to entity的操作,造成資料庫通路緩慢。此文講述的便是IEnumerable和IQueryable的差別。

微軟對IEnumerable的定義使用場景為Linq to Object,也就是涉及到記憶體操作時使用。而對IQueryable的定義使用場景為Linq to SQL(Entity)。

是以,在執行Linq to SQL(Entity)的操作時,如果使用IEnumerable則會造成全表查詢。如下圖Code:

    

IEnumerable和IQueryable在使用時的差別

  如此,在SQL Profile監測到的執行語句為兩次全表查詢。

IEnumerable和IQueryable在使用時的差別
IEnumerable和IQueryable在使用時的差別

   然而,當我們正确使用IQueryable或者var時,如下圖Code:

IEnumerable和IQueryable在使用時的差別

  得到的查詢語句為:

IEnumerable和IQueryable在使用時的差別

為了一探IEnumerabel和IQueryable在實際工作中的程式執行效率,總結來下圖的時間對比:

  

IEnumerable和IQueryable在使用時的差別

在這張圖上看到的時間機關雖然為毫秒,但這是代碼同步執行語句的查詢時間,但多個用戶端同時通路資料庫時,此時造成的資料通路速度就不再是毫秒了。

墨匠