天天看點

IQueryable,IEnumerable,List

1.IQueryable和IEnumerable都是延時執行(Deferred Execution)的,而IList是即時執行(Eager Execution)

2.IQueryable和IEnumerable在每次執行時都必須連接配接資料庫讀取,而IList讀取一次後,以後各次都不需連接配接資料庫。前兩者很容易造成重複讀取,性能低下,并且可能引發資料不一緻性

3.IQueryable和IEnumerable的差別:IEnumberalb使用的是LINQ to Object方式,它會将AsEnumerable()時對應的所有記錄都先加載到記憶體,然後在此基礎上再執行後來的Query。是以上述TestIEnumerable例子中執行的SQL是"select top(5) ...",然後在記憶體中選擇前兩條記錄傳回。

example:(model1為iqeuryble或ienumerable或list)

model model1 = model.where(...) model2 = model1.where(..)

IQueryble傳回是是委托 延遲會推遲到最後 即 循環擷取每個model2裡的元素時讀到記憶體

IEnumerable傳回的是委托 但僅截止到該傳回值 即 model2時讀到記憶體

list 傳回的是記憶體裡的值,不延遲

繼續閱讀