IEnumerable
IQueryable
  • 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 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.
·         IQueryable support lazy loading. Hence it is suitable for paging like scenarios.
·         Extension methods supports by IQueryable takes expression objects means expression tree.

Example
        MyDataContext dc = new MyDataContext ();
       IEnumerable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith("S"));
       list = list.Take<Employee>(10);

Example

      MyDataContext dc = new MyDataContext ();
        IQueryable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith("S"));
        list = list.Take<Employee>(10); 

Generated SQL statements of above query will be :

      SELECT [t0].[EmpID],    [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
    WHERE [t0].[EmpName] LIKE @p0

Generated SQL statements of above query will be :

         SELECT TOP 10 [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
         WHERE [t0].[EmpName] LIKE @p0