IEnumerable
- IEnumerable exists in System.Collections Namespace.
- IEnumerable can move forward only over a collection, it can’t move backward and between the items.
- IEnumerable is best to query data from in-memory collections like List, Array etc.
- While query data from database, IEnumerable execute select query on server side, load data in-memory on client side and then filter data.
- IEnumerable is suitable for LINQ to Object and LINQ to XML queries.
- IEnumerable supports deferred execution.
- IEnumerable doesn’t supports custom query.
- IEnumerable doesn’t support lazy loading. Hence not suitable for paging like scenarios.
- Extension methods supports by IEnumerable takes functional objects.
IQueryable
- IQueryable exists in System.Linq Namespace.
- IQueryable can move forward only over a collection, it can’t move backward and between the items.
- IQueryable is best to query data from out-memory (like remote database, service) collections.
- While query data from database, IQueryable execute select query on server side with all filters.
- IQueryable is suitable for LINQ to SQL queries.
- IQueryable supports deferred execution.
- IQueryable supports custom query using CreateQuery and Execute methods.