All about the IEnumerable VS IQueryable in c#

In Linq or entity framework, we use IEnumerable and IQueryable for data manipulation or query data. IEnumerable is inherited by IQueryable, Hence IQueryable has all the features of IEnumerable and except this, it has its own features and benefits.

Both have its own importance to query data and data manipulation in different situations in the application. we can go through with both the features and take the advantage of both the features to boost the LINQ Query performance. As per the need of application at some stage IEnumerable is useful and some stage in the application IQueryable is useful. Lets discuss about its use and features now.


IEnumerable Features:


  • 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.


Example of IEnumerable:


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

Sql query generation of above Linq Statement:


 SELECT [t0].[ID], [t0].[Name], [t0].[Salary] FROM [Employee] AS [t0]  
 WHERE [t0].[Name] LIKE @p0  



Features of IQueryable :


  • 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.
  • 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.

Example of the IQueryable:


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

Sql query generation of above Linq Statement:


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

This is how the IEnumerable and IQueryable is all about. By reading this article you will be able to boost your LINQ query performance in your application.

Happy Coding ! 

your comments are welcome..


Comments