3 回答

TA貢獻1862條經驗 獲得超7個贊
從用戶的角度來看,主要區別在于,當您使用IQueryable<T>(與正確支持事物的提供程序一起)使用時,可以節省大量資源。
例如,如果要使用許多ORM系統處理遠程數據庫,則可以選擇以兩種方式從表中獲取數據,一種返回IEnumerable<T>,一種返回IQueryable<T>。例如,假設您有一個“產品”表,并且想要獲取所有成本大于25美元的產品。
如果您這樣做:
IEnumerable<Product> products = myORM.GetProducts();
var productsOver25 = products.Where(p => p.Cost >= 25.00);
這里發生的是,數據庫加載了所有產品,并將它們通過導線傳遞到您的程序。然后,您的程序將過濾數據。本質上,數據庫執行SELECT * FROM Products,然后將所有產品返回給您。
IQueryable<T>另一方面,有了合適的提供商,您可以做到:
IQueryable<Product> products = myORM.GetQueryableProducts();
var productsOver25 = products.Where(p => p.Cost >= 25.00);
代碼看起來相同,但是區別在于執行的SQL將是SELECT * FROM Products WHERE Cost >= 25。
從您作為開發人員的觀點來看,這看起來是一樣的。但是,從性能的角度來看,您只能通過網絡返回2條記錄,而不是20,000條...。
- 3 回答
- 0 關注
- 907 瀏覽
添加回答
舉報