September 14, 2012

IEnumerable & IQueryable

To query from database using LINQ, We use IEnumerable and IQueryable for manipulation of data. 

IENUMERABLE :

IEnumerable exposes the enumerator, which supports a simple iteration over a non-generic collection.

IQUERYABLE :

IQueryable provides functionality to evaluate queries against a specific data source wherein the type of the data is not specified.

COMPARISION :

1. IEnumerable exists in System.Collections Namespace.
    IQueryable exists in System.Linq Namespace.

2. IEnumerable is a forward only collection, it can’t move backward and between the items.
    IQueryable is a forward only collection, it can’t move backward and between the items.

3. IEnumerable is best to query data from in-memory collections like List, Array etc.
    IQueryable is best to query data from out-memory (like remote database, service) collections.

4. While query data from database, IEnumerable execute select query on server side, load data in-memory
    on client side and then filter data.
    While query data from database, IQueryable execute select query on server side with all filters.

5. IEnumerable is suitable for LINQ to Object and LINQ to XML queries.
    IQueryable is suitable for LINQ to SQL queries.

6. IEnumerable supports deferred execution.
    IQueryable supports deferred execution.  

7. IEnumerable doesn’t supports custom query.
    IQueryable supports custom query using CreateQuery and Execute methods.

8. IEnumerable doesn’t support lazy loading. Hence not suitable for paging like scenarios.
    IQueryable support lazy loading. Hence it is suitable for paging like scenarios.

9. Extension methods supports by IEnumerable takes functional objects.
    Extension methods supports by IQueryable takes expression objects means expression tree.