久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

什么是IQueryable?

 gingging 2013-12-08

首先,,看定義:

  • public interface IQueryable : IEnumerable;

 就是說(shuō),,IQueryable繼承于IEnumerable。在此之上,,增加了一些屬性和擴(kuò)展方法,。但是,關(guān)鍵不在這些屬性和方法上,,而是IQueryable實(shí)現(xiàn)了革命性的新行為方式,。

一般地,IQueryable用法如下:

  • IQueryable<Customer> custs = from c in db.Customers where c.City == "<City>" select c;

 但是,,IQueryable<Customer> custs 不是一個(gè)實(shí)實(shí)在在的東西,,比如,常規(guī)的可以用foreach操作的一組對(duì)象,。

 當(dāng)然,,有人會(huì)不同意,因?yàn)樗梢缘拇_可以使用 foreach 去操作一組對(duì)象,。

這有些矛盾,,這就是我為什么用“常規(guī)”這個(gè)詞。事實(shí)是,,當(dāng)你使用foreach之前,,這些對(duì)象并不存在。對(duì)于一組“常規(guī)”對(duì)象,,無(wú)論你“foreach”與否,,它們都已經(jīng)被生產(chǎn)并存在了。換句話說(shuō),,在 foreach 之前,,IQueryable<Customer> custs 并沒(méi)有在內(nèi)存中出現(xiàn),更精確地說(shuō),,沒(méi)有以數(shù)據(jù)的形式在內(nèi)存中出現(xiàn),。 

這就是奇特的IQueryable<T>. 它一種半數(shù)據(jù)半方法的東西。說(shuō)它是數(shù)據(jù),,因?yàn)榭梢韵駥?duì)象那樣操作它,;說(shuō)它是方法,因?yàn)樗?/font>可以實(shí)現(xiàn)"延遲加載(lazy loading)行為,,即只有在使用時(shí)才生成對(duì)象和裝載數(shù)據(jù),。

為什么要發(fā)明和使用IQueryable<T>,? IEnumerable<T>不行嗎?

IQueryable<T>關(guān)鍵的,,也是革命性的特性就是可以實(shí)現(xiàn)延遲加載,。有了IQueryable<T>,就可以實(shí)現(xiàn)LINQ to SQL,。它可以把一系列LINQ操作串聯(lián)起來(lái),,在最終數(shù)據(jù)集生成之前,沒(méi)有任何數(shù)據(jù)在內(nèi)存中產(chǎn)生,,這就大大降低了LINQ操作對(duì)內(nèi)存的消耗,,而這種消耗實(shí)際上是巨大的。否則,,不得不用IEnumerable<T>,,它與IQueryable<T>不同,它的所有操作都有在內(nèi)存中進(jìn)行,,即每步操作都要把數(shù)據(jù)從數(shù)據(jù)庫(kù)中加載到內(nèi)存中,。也許實(shí)現(xiàn)一個(gè)數(shù)據(jù)選擇操作,它耗費(fèi)了幾個(gè)M的內(nèi)存,,最后就用一個(gè)int,。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多