欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

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

1.where條件接收表達(dá)式,返回IQueryable接口

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

那么什么時(shí)候用IQueryable<T>,什么時(shí)候用IEnumerable<T>?

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

2.Expression是一個(gè)表達(dá)式,會(huì)存儲(chǔ)拼接表達(dá)式樹,直到在運(yùn)行期最終執(zhí)行。

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

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

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

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

這就是IQueryable的延遲加載把.

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容

    C#使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容

    HtmlAgilityPack是一個(gè)HTML解析類庫(kù),這篇文章主要為大家詳細(xì)介紹了C#如何使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容,感興趣的小伙伴可以參考一下
    2023-12-12
  • C#使用LINQ查詢操作符實(shí)例代碼(一)

    C#使用LINQ查詢操作符實(shí)例代碼(一)

    這篇文章介紹了C#使用LINQ查詢操作符的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • WPF實(shí)現(xiàn)控件拖動(dòng)的示例代碼

    WPF實(shí)現(xiàn)控件拖動(dòng)的示例代碼

    這篇文章主要介紹了WPF實(shí)現(xiàn)控件拖動(dòng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 利用Unity制作特寫鏡頭的示例代碼

    利用Unity制作特寫鏡頭的示例代碼

    這篇文章主要介紹了如何利用Unity制作特寫鏡頭效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,感興趣的可以了解一下
    2022-04-04
  • 深入分析c# 繼承

    深入分析c# 繼承

    這篇文章主要介紹了c# 繼承的相關(guān)資料,文中講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C# SimpleJSON字典反序列化實(shí)戰(zhàn)教程

    C# SimpleJSON字典反序列化實(shí)戰(zhàn)教程

    C# 解析JSON道路千萬(wàn)條,其中最流行的還是由Newtonsoft出品的Json.NET,只需要將Json的結(jié)構(gòu)做成C#的class,即可實(shí)現(xiàn)完美的序列化和反序列化,這篇文章主要介紹了C# SimpleJSON字典反序列化實(shí)戰(zhàn)教程,需要的朋友可以參考下
    2024-03-03
  • C#微信公眾號(hào)開發(fā)之消息處理

    C#微信公眾號(hào)開發(fā)之消息處理

    這篇文章介紹了C#微信公眾號(hào)開發(fā)之消息處理,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#執(zhí)行外部命令示例分享

    c#執(zhí)行外部命令示例分享

    c#執(zhí)行外部命令示例分享,大家參考使用吧
    2013-12-12
  • C#對(duì)稱加密與非對(duì)稱加密實(shí)例

    C#對(duì)稱加密與非對(duì)稱加密實(shí)例

    這篇文章主要介紹了C#對(duì)稱加密與非對(duì)稱加密實(shí)例,詳細(xì)分析了對(duì)稱加密與非對(duì)稱加密的原理與具體實(shí)現(xiàn)方法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#連接MySql數(shù)據(jù)庫(kù)的方法

    C#連接MySql數(shù)據(jù)庫(kù)的方法

    最近兩天在解決C#連接MySql數(shù)據(jù)庫(kù)的問(wèn)題,通過(guò)不同的從網(wǎng)上學(xué)習(xí),最終找到了解決的辦法,現(xiàn)在和大家分享一下
    2013-10-10

最新評(píng)論