最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# IQueryable及IEnumerable區(qū)別解析

 更新時間:2020年09月18日 11:24:34   作者:八英里  
這篇文章主要介紹了C# IQueryable及IEnumerable區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在使用EF查詢數(shù)據(jù)的時候,我們常用的查詢數(shù)據(jù)方式有l(wèi)inq to sql,linq to object,

查詢返回的結(jié)果有兩種類型:IQueryable、IEnumerable,兩者內(nèi)部的處理機制是完全不同的。

清楚認識,這里也是一個數(shù)據(jù)查詢的優(yōu)化點。

在System.linq命名空間,有兩個靜態(tài)類:Queryable和Enumerable.

在System.linq.Queryable中,參數(shù)接收的是一個表達式類型,返回IQueryable接口

public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);

在System.linq.Enumerable中,參數(shù)接收的是一個謂詞表達式,也就是一個委托

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

那么在查詢數(shù)據(jù)使用linq to object的時候,會根據(jù)傳遞的參數(shù)不同返回不同的類型.

1.where條件接收表達式,返回IQueryable接口

2.where條件接收一個謂詞表達式(委托)返回一個IEnumerable接口

那么什么時候用IQueryable<T>,什么時候用IEnumerable<T>?

1.Func<>謂詞表達式,就是一個委托,委托一旦調(diào)用,就立即執(zhí)行了,將執(zhí)行結(jié)果保存在內(nèi)存中。

2.Expression是一個表達式,會存儲拼接表達式樹,直到在運行期最終執(zhí)行。

那么在EF中我們根據(jù)條件查詢數(shù)據(jù)時,不應該把數(shù)據(jù)一次性加載到本地內(nèi)存中,然后再本地內(nèi)存中進行篩選,如果數(shù)據(jù)量大了,就崩潰了。

我們需要將表達式組合好,然后再一起提交到數(shù)據(jù)庫執(zhí)行,返回查詢結(jié)果。

(每次在執(zhí)行where查詢操作符的時候IQueryProvider會為我們創(chuàng)建一個新的IQueryable<T>,調(diào)用AsEnumerable()方法的時候并不會去實際取值,只是

得到了一個IEnumerable,所以EF在查詢數(shù)據(jù)時候不要先取IEnumerable再去篩選數(shù)據(jù)。執(zhí)行ToList方法時才會去真正調(diào)用迭代器GetEnumerator()
取值。真正取值時候,會去執(zhí)行IQueryProvider中的Excute方法.(解析表達式,然后執(zhí)行取得結(jié)果))

這就是IQueryable的延遲加載把.

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中Html.RenderPartial與Html.RenderAction的區(qū)別分析

    C#中Html.RenderPartial與Html.RenderAction的區(qū)別分析

    這篇文章主要介紹了C#中Html.RenderPartial與Html.RenderAction的區(qū)別分析,需要的朋友可以參考下
    2014-07-07
  • C#實現(xiàn)String類型和json之間的相互轉(zhuǎn)換功能示例

    C#實現(xiàn)String類型和json之間的相互轉(zhuǎn)換功能示例

    這篇文章主要介紹了C#實現(xiàn)String類型和json之間的相互轉(zhuǎn)換功能,涉及C# json格式數(shù)據(jù)的構(gòu)造、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • c#文件的I/O基本操作

    c#文件的I/O基本操作

    System.IO命名空間包含允許在數(shù)據(jù)流和文件上進行同步,異步及寫入的類型,下面是關(guān)于c#文件的I/O基本操作講解,需要的朋友可以參考下
    2014-03-03
  • C#使用Newtonsoft.Json庫實現(xiàn)JSON數(shù)據(jù)中某個字段值的提取功能

    C#使用Newtonsoft.Json庫實現(xiàn)JSON數(shù)據(jù)中某個字段值的提取功能

    在C#中,可以使用Newtonsoft.Json庫(也稱為Json.NET)來處理JSON數(shù)據(jù),下面將通過幾個示例來展示如何從JSON格式的文本中提取某個字段的值,并將其存儲到字符串、列表或其他泛型集合中,需要的朋友可以參考下
    2025-03-03
  • C#怎么給PDF添加背景圖片

    C#怎么給PDF添加背景圖片

    無論是辦公還是日常生活中都經(jīng)常會用到,很多時候,PDF文件的背景色都是白色,看多了難免覺得累,更換PDF的背景不僅可以讓眼睛看起來更舒服,還可以讓PDF文件看上去更美觀。這篇文章我主要寫的是如何使用C# 給PDF文件添加圖片背景
    2016-02-02
  • C#紋理畫刷TextureBrush用法實例

    C#紋理畫刷TextureBrush用法實例

    這篇文章主要介紹了C#紋理畫刷TextureBrush用法,實例分析了紋理畫刷TextureBrush的具體使用技巧,需要的朋友可以參考下
    2015-06-06
  • Unity Shader實現(xiàn)動態(tài)霧效果

    Unity Shader實現(xiàn)動態(tài)霧效果

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)動態(tài)霧效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Unity實現(xiàn)答題系統(tǒng)的示例代碼

    Unity實現(xiàn)答題系統(tǒng)的示例代碼

    這篇文章主要和大家分享了利用Unity制作一個答題系統(tǒng)的示例代碼,文中的實現(xiàn)方法講解詳細,對我們學習或工作有一定的幫助,需要的可以參考一下
    2022-05-05
  • C#對DataTable中的某列進行分組

    C#對DataTable中的某列進行分組

    這篇文章介紹了C#對DataTable某列進行分組的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C# 正則表達式進階

    C# 正則表達式進階

    這篇文章主要介紹了C# 正則表達式進階,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論

东宁县| 玛曲县| 恩平市| 吉林省| 邓州市| 西乡县| 申扎县| 东乌| 平阳县| 凯里市| 两当县| 游戏| 邻水| 呈贡县| 夹江县| 濮阳县| 兰考县| 本溪市| 苗栗县| 贵阳市| 怀远县| 油尖旺区| 工布江达县| 温州市| 阿拉善盟| 玛多县| 博野县| 贵港市| 平凉市| 永年县| 荆州市| 翁源县| 衡南县| 太仓市| 上高县| 安图县| 伊川县| 鞍山市| 肇源县| 乐平市| 洛宁县|