IEnumerable和IQueryable的區別

2021-09-22 09:20:37 字數 1084 閱讀 6504

**:

ienumerable介面

公開列舉器,該列舉器支援在指定型別的集合上進行簡單迭代。也就是說:實現了此介面的object,就可以直接使用foreach遍歷此object;

iqueryable 介面

它繼承 ienumerable

介面,而因為.net版本加入linq和

iqueryable後,使得ienumerable不再那麼單調,變得更加強大和豐富。

為了區別兩個介面,我們通過乙個實際的例子來解釋一下。

根據上篇隨筆的例項,編寫如下**:

staticvoid main(string

args)

console.writeline(i);

foreach (var c in

classesienu)

console.writeline(i);

}console.writeline("ok

");console.readkey();

}

注意紅色**部分,在用linq查詢實體集合之前我先將其轉換成

ienumerable介面型別,看看最終執行的sql是怎樣的。

第一種:直接返回

iqueryable型別的查詢,如下圖所示:

第二種:在用分頁查詢之前先將其轉換成

ienumerable實際執行的sql如下圖所示:

總結

iqueryable介面與ienumberable介面的區別:  ienumerable泛型類在呼叫自己的skip 和 take 等擴充套件方法之前資料就已經載入在本地記憶體裡了,而iqueryable是將skip ,take 這些方法表示式翻譯成t-sql語句之後再向sql伺服器傳送命令,它並不是把所有資料都載入到記憶體裡來才進行條件過濾。

看這裡:

IEnumerable和IQueryable之我觀

在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...

IEnumerable和IQueryable之我觀

在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...

IEnumerable和IQueryable的區別

ienumerable介面 公開列舉器,該列舉器支援在指定型別的集合上進行簡單迭代。也就是說 實現了此介面的object,就可以直接使用foreach遍歷此object iqueryable 介面 它繼承 ienumerable 介面,而因為.net版本加入linq和 iqueryable後,使得i...