IQueryable inherited IEnumerable, so it obviously get all the functionality IEnumerable has. The working style of both is still different. There are still lot many differences exists between the two which impact the decision we took in usage of either one. Both of these suits for particular scenarios. Following are some differences using which we can took decision to use anyone of these optimally.
Parameter | IQueryable | IEnumerable |
---|---|---|
Extension Methods | Extension methods defined for IQueryable take expression objects. Means, the delegate IQueryable extension methods receives is an expression tree. | Extension methods defined for IEnumerable take functional objects. Means, the delegate IEnumerableextension methods receives is a method to invoke. |
Great For | IQueryable allows out-of-memory things like remote data source operations, such as working with database or web service. | IEnumerable is great for working with sequences (in-memory collections), that are iterated in-memory. |
Supported Queries | IQueryable supports LINQ to SQL queries. | IEnumerable supports LINQ to Object and LINQ to XML queries. |
Deferred Execution | IQueryable supports lazy loading (Suited for scenarios like paging and composition based queries). | IEnumerable lost lazy loadnig ability on the external provider. |
Moving between items | IQueryable provides many methods to move between the items. | IEnumerable doesn’t have the concept of moving between items, it is forward only collection. |
Filtering Mechanism | IQueryable executes query on server side along with all the filters applied. | IEnumerable executes select query on server side, loads data in-memory and then executes filter at client side. |
CreateQuery and Execute Methods | IQueryable has these two additional methods. Both takes expression as input. CreateQuery returns IQueryable representing expression tree. Execute returns result of the query. | NA |
Custom Querying Capability | IQueryable provides additional functionality to implement custom querying with LINQ. | IEnumerable does not have custom querying capability. |
Performance Perspective | IQueryable gives best performance when used for out-of-memory data store operations (that is external to .NET CLR memory). | IEnumerable gives best performance when used to manipulate in-memory collections. |
Read more: Jinal Desai
QR: