国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

23.C#Queryable的擴展方法(十二章12.1-12.2)

2019-11-17 02:36:33
字體:
來源:轉載
供稿:網友

23.C#Queryable的擴展方法(十二章12.1-12.2)

  今天要寫的知識還真心有點繞呢,對于第一節的內容,其實是把原先在內存中的數據源,換成了從數據庫中提取出來的數據。從代碼的使用方式上是一樣的,直接跳過,來看看IEnumerable和IQueryable的區別。

  正如Enumerable類型包含著關于IEnumerable<T>的擴展方法來實現LINQ標準查詢操作符一樣,Queryabl類型包含著關于IQueryable<T>的擴展方法。IEnumerable<T>和IQueryable<T>有兩個重要的區別。

  首先IEnumerable<T>的方法都使用委托作為參數,例如,Select方法使用Func<TSource,TResult>。這對于內存中的操作是沒有問題的,但對于別處執行查詢的LINQ提供器來說,我們需要能執行更詳細檢查的格式--表達式樹。例如,Queryable中相應的Select的重載就要獲取類型為ExPRession<Func<TSource,TResult>>的參數。編譯器根本不會關心這些--在查詢編譯之后,它具有一個需要作為參數傳遞給方法的Lambda表達式,而Lambda表達式即可以被轉換成委托實例,也可以轉換成表達式樹。如圖中的表示,會根據數據源選擇相應的重載。

  選擇兩種路徑的查詢,具體使用哪個路徑取決于數據源實現的是IQueryable接口還是IEnumerable接口。

  當我們將Lambda表達式傳入作為參數時,Lambda表達式即可以轉換成委托實例,也可以轉換成表達式樹實例,左邊的路徑用于執行內存中的操作,而右邊路徑用于來在數據庫中執行SQL。

  Queryable和Enumerable之間的第2個重大差別,Enumerable的擴展方法會完成與對應查詢操作符相關的實際工作(至少會構建完成這些工作的迭代器)。例如,Eumerable.Where中的代碼執行相關的過濾操作,并在結果序列中生成適當的元素。通過比較,Queryable中的查詢操作符的"實現"做的事情非常少。

  • IQueryable<T>和相關接口的介紹

  IQueryable<T>是從IEnumerable<T>和非泛型的IQueryable繼承而來,而IQueryable又繼承于非泛型IEnumerable,IQueryable僅有三個屬性:QueryProvider、ElementType和Expression。理解IQueryable的最簡單方式就是,把它看作一個查詢,在執行的時候,將會生成結果序列。從LINQ的角度來看,由于是通過IQueryable的Expression屬性返回結果,所以查詢的詳細信息就保存于表達式樹中。

  請大家給出深入見解,學習一二,斧正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北流市| 河源市| 襄城县| 健康| 连州市| 盐山县| 北票市| 永吉县| 永清县| 宁波市| 新乡市| 新乡县| 巨野县| 邢台市| 定结县| 新丰县| 道孚县| 日照市| 五家渠市| 新津县| 平南县| 五指山市| 文安县| 固阳县| 运城市| 晋州市| 甘南县| 白城市| 连南| 白玉县| 长岛县| 阳泉市| 盐源县| 龙山县| 霍林郭勒市| 通化县| 任丘市| 饶阳县| 汉阴县| 申扎县| 乐都县|