.ToList()、.AsEnumerable()、AsQueryable()之間有什么區(qū)別?我知道LINQ到實(shí)體和LINQto對(duì)象的一些不同之處,這是第一個(gè)實(shí)現(xiàn)的。IQueryable和第二個(gè)工具IEnumerable我的問題范圍在EF 5之內(nèi)。我的問題是,這三種方法的技術(shù)區(qū)別是什么?我看到,在許多情況下,所有這些都有效。我還看到使用它們的組合,如.ToList().AsQueryable().這些方法到底意味著什么?是否有任何性能問題或什么東西會(huì)導(dǎo)致使用一個(gè)而另一個(gè)呢?為什么一種用途,例如,.ToList().AsQueryable()而不是.AsQueryable()?
3 回答

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
托利斯特()
立即執(zhí)行查詢
AsEnDigable()
延遲(稍后執(zhí)行查詢) 參數(shù): Func<TSource, bool>
負(fù)載 每一,每個(gè)
記錄到應(yīng)用程序內(nèi)存,然后處理/過濾它們。(例如,WHERE/Take/Skip,它將從表1中選擇*,進(jìn)入內(nèi)存,然后選擇第一個(gè)X元素)(在本例中,它所做的事情:Linqto-SQL+Linqto-Object)
AsQueryable()
延遲(稍后執(zhí)行查詢) 參數(shù): Expression<Func<TSource, bool>>
將表達(dá)式轉(zhuǎn)換為T-SQL(與特定提供程序一起),遠(yuǎn)程查詢并將結(jié)果加載到應(yīng)用程序內(nèi)存中。 這就是為什么DbSet(在實(shí)體框架中)也繼承了IQueryable來獲得高效的查詢。 不要加載每條記錄,例如,如果采用(5),它將在后臺(tái)生成SELECT 5*SQL。這意味著這種類型對(duì)SQL數(shù)據(jù)庫(kù)更友好,這也是為什么這種類型通常具有更高的性能,并且在處理數(shù)據(jù)庫(kù)時(shí)建議這樣做。 所以 AsQueryable()
通常比 AsEnumerable()
因?yàn)樗紫壬蒚-SQL,其中包括Linq中的所有WHERE條件。
- 3 回答
- 0 關(guān)注
- 389 瀏覽
添加回答
舉報(bào)
0/150
提交
取消