[C#] IEnumerable vs IQueryable
阿新 • • 發佈:2017-08-24
通過 進行 profile 查詢 感謝 獲取 pro iquery client
這篇博客將介紹IEnumerable和IQueryable之間的區別。
1. IQueryable是繼承自IEnumerable接口的。所以IEnumerable能做的,IQueryable都能做。
2. 先看代碼,然後再講兩者之間的區別。
using (NerdDinnerDataContext context = new NerdDinnerDataContext()) { IEnumerable<Dinner> dinners = context.Dinners; IEnumerable<Dinner> filters = dinners.Where(d => d.DinnerID > 0).ToList(); }
這段代碼是去查詢並找出DinnerID>0的所有Dinner。通過SQL Server Profiler可以看出,Where後面的過濾並沒有在SQL中執行,而是將所有的Dinner集合返回到Client端,然後再進行Filter操作的。
下面將IEnumerable替換成IQueryable
using (NerdDinnerDataContext context = new NerdDinnerDataContext()) { IQueryable<Dinner> dinners = context.Dinners; IEnumerable<Dinner> filters = dinners.Where(d => d.DinnerID > 0).ToList(); }
通過SQL Server Profiler可以看到,數據集的過濾是在DB一層執行的。
IQueryable與IEnumerable的區別在於前者的filter邏輯在DB端執行,後者的filter邏輯在Client端執行。
結論:
如果數據集合均為內存數據,建議使用IEnumerable。
如果數據是從數據庫中獲取,建議使用IQueryable,這樣可以降低網絡流量和充分利用SQL Server的處理能力。
感謝您的閱讀~
[C#] IEnumerable vs IQueryable