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...