前面在介紹LINQ的時候有稍微帶過,這邊想介紹一下這兩個介面的差異
從資料撈取和篩選時機判斷:
Interface | IEnumerable | IQueryable |
---|---|---|
執行篩選 | 記憶體 | 資料庫 |
執行順序 | 先撈全部在過濾 | 先過濾在撈資料 |
概念 | LINQ to Objects | LINQ to SQL |
IQueryable 繼承自 IEnumerable,因此IQueryable.GetEnumerator() 才是執行資料查詢的觸發點,也就是在呼叫終端方法時,如:ToList(),才真的去資料庫拉資料回來,因此前面的查詢條件都只是先保留,等到終端方法被呼叫時才轉換成SQL,並執行
那要怎麼知道現在是哪一種介面?
因為EF主要是查資料庫的資料,會預設 DbSet ,實作 IQueryable
什麼時候會用到IEnumerable?
LINQ 中使用了資料庫無法理解或轉換成SQL的C#方法
Effective C# 42.區分 IEnumerable 與 IQueryable 資料來源
IEnumerable v.s IQueryable
倒數七天...