IQueryable與IList差別之處

2021-06-25 21:25:49 字數 661 閱讀 3682



ilist(ilist)會立即在記憶體裡建立持久資料,這就沒有實現「延期執行(deferred execution)」,如果被載入的實體有關聯實體(associations),此關聯實體不會被載入(既不立即載入,也不延遲載入)。

iqeurable(iquerable)不會立即在記憶體裡建立持久資料,只有遍歷它(如通過foreach)、把它轉換成list等情況下才會向記憶體載入資料,它可以實現「延期執行」,如果當前被載入的實體有關聯實體(associations),此關聯實體可被接下來的訪問載入。

看下面一段**:

//ilist的情況

ilist users = res.tolist(); //此時已把users載入到記憶體,而每個user的關聯實體(userinfos)未

//被載入,所以下一行**無法順利通過

var ss = users.where(p => p.userinfos.id != 3); //此處報錯,因為p的userinfos實體無法被載入

// iquerable的情況

iqueryable users = res.asqueryable(); //users未被立即載入,關聯實體可通過「延遲載入」獲

//得var ss = users.where(p => p.userinfos.id != 3);//此處順利獲得對應的ss

IQueryable和IEnumerable的區別

在新的系統框架中,常會用到iqueryable和ienumerable這兩個介面,經過一段時間的接觸和學習,對於這兩種型別的區別有了初步的理解。我們先來看一下這兩種介面的定義 ienumerable介面 公開列舉器,該列舉器支援在指定型別的集合上進行簡單迭代。也就是說 實現了此介面的object,就...

IQueryable和IEnumerable的區別

在新的系統框架中,常會用到iqueryable和ienumerable這兩個介面,經過一段時間的接觸和學習,對於這兩種型別的區別有了初步的理解。我們先來看一下這兩種介面的定義 ienumerable介面 公開列舉器,該列舉器支援在指定型別的集合上進行簡單迭代。也就是說 實現了此介面的object,就...

IQueryable和IEnumerable的區別

iqueryable介面是繼承自ienumerable的介面 iqueryable中有表示式樹,這可以看作是它的乙個優勢。所以,使用iqueryable操作時,比如對資料的過濾,排序等操作,這些都會先快取到表示式樹中。當對資料庫操作真正發生時,它才會將表示式樹執行來獲取資料。這也就是說,比如選擇to...