IEnumerable VS IQueryable

Shailendra Chauhan  Print   3 min read  
16 Jun 2012
22 Apr 2019
Intermediate
223K

In LINQ to query data from database and collections, we use IEnumerable and IQueryable for data manipulation. IEnumerable is inherited by IQueryable, Hence IQueryable has all the features of IEnumerable and except this, it has its own features. Both have its own importance to query data and data manipulation. Let’s see both the features and take advantage of both the features to boost your LINQ Query performance.

IEnumerable

  1. IEnumerable exists in System.Collections Namespace.

  2. IEnumerable can move forward only over a 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.

  4. While query data from a database, IEnumerable execute a select query on the server side, load data in-memory on a client-side and then filter data.

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

  6. IEnumerable supports deferred execution.

  7. IEnumerable doesn’t support custom query.

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

  9. Extension methods support by IEnumerable takes functional objects.

IEnumerable Example

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

Generated SQL statements of the above query will be :

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

Notice that in this query "top 10" is missing since IEnumerable filters records on the 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 a database, IQueryable execute the select query on the 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 support by IQueryable takes expression objects means expression tree.

IQueryable 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 the above query will be :

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

Notice that in this query "top 10" is exist since IQueryable executes a query in SQL server with all filters.

Read More Articles Related to LINQ
Summary

In this article, I try to explain the difference between IEnumerable and IQueryable. I hope after reading this article you will be able to boost your LINQ query performance. I would like to have feedback from my blog readers. Please post your feedback, question, or comments about this article.

Take our free skill tests to evaluate your skill!

In less than 5 minutes, with our skill test, you can identify your knowledge gaps and strengths.

Learn to Crack Your Technical Interview

+
+
Accept cookies and close this message