Click here to Skip to main content
Click here to Skip to main content

Difference Between IEnumerable and IQueryable

By , 30 Sep 2012
 

Introduction

This Article discusses the basic differences between IEnumerable and IQueryable Interface. The article is for Beginners who are eager to know about these differences, this article is also for newbies or novice who are in the learning stage.

Background

In LINQ to query data from database and collections, we use IEnumerable and IQueryable for data manipulation. IEnumerable is inherited by IQueryable, hence it has all the features of it and except this, it has its own features. Both have their own importance to query data and data manipulation. Let’s see both the features and take the 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 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 IEnumerable 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);
*Notice that in this query "top 10" is existing since IQueryable executes query in SQL server with all filters. 

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

Points of Interest  

  1. IEnumerable<T> represents a forward-only cursor of T, .NET 3.5 added extension methods that included the LINQ standard query operators like Where and First, with any operators that require predicates or anonymous functions taking Func<T>.
  2. IQueryable<T> implements the same LINQ standard query operators, but accepts Expression<Func<T>> for predicates and anonymous functions. Expression<T> is a compiled expression tree, a broken-up version of the method ("half-compiled" if you will) that can be parsed by the queryable's provider and used accordingly.

If some of you are really interested in knowing these differences you can also refer to the MSDN 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Nischal Bhatt
Software Developer
India India
Member
A .Net Developer with a varied interest in programming using Web and Desktop application using ASP.Net, C#, AJAX, WCF, WPF, Silverlight,SQL Server 2008 R2 and Fluent NHibernate. A quick learner and a badminton enthusiast.
In my spare time i try to learn some new technologies and explore what others are doing.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
AnswerVery Wrong InfomemberShahzad.ilyas7 May '13 - 5:54 
GeneralMy vote of 1memberAimirim.Software28 Apr '13 - 7:29 
GeneralMy vote of 1memberblackninja729 Jan '13 - 23:36 
GeneralWrong infomemberblackninja729 Jan '13 - 23:30 
GeneralMy vote of 3memberSRIRAM 22 Oct '12 - 22:52 
Question"Cut and Paste" mistake?memberAlexMortola2 Oct '12 - 19:14 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 30 Sep 2012
Article Copyright 2012 by Nischal Bhatt
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid