Tuesday, March 24, 2015

IEnumerable VS IList

Interface Scenario
IEnumerable, IEnumerable<T> The only thing you want is to iterate over the elements in a collection. You only need read-only access to that collection.
ICollection, ICollection<T> You want to modify the collection or you care about its size.
IList, IList<T> You want to modify the collection and you care about the ordering and / or positioning of the elements in the collection.
List, List<T> Since in object oriented design you want to depend on abstractions instead of implementations, you should never have a member of your own implementations with the concrete type List/List.

IList

  1. IList exists in System.Collections Namespace.
  2. IList is used to access an element in a specific position/index in a list.
  3. Like IEnumerable, IList is also best to query data from in-memory collections like List, Array etc.
  4. IList is useful when you want to Add or remove items from the list.
  5. IList can find out the no of elements in the collection without iterating the collection.
  6. IList supports deferred execution.
  7. IList doesn't support further filtering.

    IEnumerable

  8. IEnumerable exists in System.Collections Namespace.
  9. IEnumerable can move forward only over a collection, it can’t move backward and between the items.
  10. IEnumerable is best to query data from in-memory collections like List, Array etc.
  11. IEnumerable doesn't support add or remove items from the list.
  12. Using IEnumerable we can find out the no of elements in the collection after iterating the collection.
  13. IEnumerable supports deferred execution.
  14. IEnumerable supports further filtering.
  15.  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.

    1. IEnumerable doesn’t supports custom query.
    2. IEnumerable doesn’t support lazy loading. Hence not suitable for paging like scenarios.
    3. Extension methods supports by IEnumerable takes functional objects.
 IEnumerable filters records on client side

IQueryable

  1. IQueryable exists in System.Linq Namespace.
  2. IQueryable can move forward only over a collection, it can’t move backward and between the items.
  3. IQueryable is best to query data from out-memory (like remote database, service) collections.
  4. While query data from database, IQueryable execute select query on server side with all filters.
  5. IQueryable is suitable for LINQ to SQL queries.
  6. IQueryable supports deferred execution.
  7. IQueryable supports custom query using CreateQuery and Execute methods.
  8. IQueryable support lazy loading. Hence it is suitable for paging like scenarios.
  9. Extension methods supports by IQueryable takes expression objects means expression tree.
 IQueryable executes query in SQL server with all filters.

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More