Please enable Javascript to correctly display the contents on Dot Net Tricks!

IEnumerable VS IQueryable

Posted By : Shailendra Chauhan, 16 Jun 2012
Updated On : 28 Jan 2015
Total Views : 119,069   
 

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 fetures and take the advantage of both the fetures 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 database, IEnumerable execute select query on server side, load data in-memory on 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 supports custom query.

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

  9. Extension methods supports 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 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 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 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 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 query in SQL server with all filters.

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.

 
 
About the Author
Hey! I'm Shailendra Chauhan full-time author, consultant & trainer. I have more than 6 years of hand over Microsoft .NET technologies and other web technologies like JavaScript, AngularJS, NodeJS etc. I am an entrepreneur, the founder & chief editor of www.dotnet-tricks.com and www.dotnettricks.com. I am author of most popular e-books for technical Interview on ASP.NET MVC Interview Questions and Answers & AngularJS Interview Questions and Answers & LINQ Interview Questions and Answers.
I have delivered 100+ training sessions to professional world-wide over Microsoft .NET technologies such C#, ASP.NET MVC, WCF, Entity Framework and other mobile technologies such Ionic, PhoneGap, Corodva. Read more...
 
Free Interview Books
 
23 APR
NodeJS Development (offline)

Sat, Sun (10:00 AM-12:00 PM IST)

More Details
16 APR
ASP.NET MVC with AngularJS Development (offline)

Sat, Sun (8:00 AM-10:00 AM IST)

More Details
11 APR
ASP.NET MVC with AngularJS Development (online)

Mon-Fri (7:00 AM-9:00 AM IST)

More Details
2 APR
ASP.NET MVC with AngularJS Development (offline)

Sat, Sun (4:00 PM-6:00 PM IST)

More Details
19 MAR
ASP.NET MVC with AngularJS Development (online)

Mon - Fri     (8:30 PM-10:30 PM IST)

25 FEB
NodeJS Development (online)

Mon-Fri     (7:00 AM-9:00 AM IST)

21 FEB
ASP.NET MVC with AngularJS Development (offline)

Sat, Sun     (3:00 PM-5:00 PM IST)

6 FEB
NodeJS Development (offline)

Sat, Sun     (10:00 AM-12:00 PM IST)

31 JAN
ASP.NET MVC with AngularJS Development (offline)

Sat, Sun     (8:00 AM-10:00 AM IST)

31 JAN
ASP.NET MVC with AngularJS Development (offline)

Sat, Sun     (4:00 PM-6:00 PM IST)

4 JAN
.NET Development (offline)

Mon-Fri     (9:00 AM-11:00 AM IST)

BROWSE BY CATEGORY
 
SUBSCRIBE TO LATEST NEWS
 
LIKE US ON FACEBOOK
 
+