在上一篇博客中我們大致學習了EF框架的增刪改查的功能,這篇我們主要來說一下Iqueryable集合和List等本地集合的區別,下面我們通過建立一個簡單的例子來學習這個知識點,直接進入主題吧
1.首先對比一下兩段代碼?看一下有什么結果:
(1) 第一段代碼如圖所示:
(2)第一段代碼使用數據庫的Profiler查看執行結果:
(3)第二段代碼如圖所示:
(4) 第一段代碼使用數據庫的Profiler查看執行結果:
2.IQueryable
(1) IQueryable表達式分為三個項,第一個是查詢數據的表達式,第二個是元素類型,第三個是:查詢數據Provider,每次我們需要取出集合里面的數據的話,Provider都回去解析查詢數據的表達式,解析完之后再去數據庫將數據取出來,傳遞給集合使用
3.List,Array,IEnumable等本地類型的集合
(1) 本地類型的存儲數據就像是往箱子里面塞東西,你想往里面放就放,然后當我們使用的時候,直接遍歷一下拿出來就行了,而IQeurable是你使用數據的時候先讓Provider解析查詢數據的表達式,,然后去響應的地方去查詢數據。而List等已經在本地存放了,你只需要拿出來使用就行了
4. 本地集合(List和Array等集合)和IQuerable圖示信息
5.知識點總結
(1) 解決查詢多次的問題,因IQueryable延遲加載,當用到集合的時候,provider會解析表達式,然后生成查詢,所以會走一個復雜的過程。
(2) 本地集合:List,Array,IEnumable都是本地集合,都是緩存在里面的
(3) 使用EF管理上下文實例的最佳選擇是線程的唯一。
(4) IEnumerable接口是一個公開枚舉器,該枚舉器支持在指定的集合上進行簡單迭代,也就是次接口可以直接使用foreach遍歷次Object。具體的分析見上面。