IEnumerable

IQueryable

1.     IEnumerable exists in System.Collections Namespace. 1.     IQueryable exists in System.Linq Namespace.
2.     IEnumerable can move forward only over a collection, it can’t move backward and between the items. 2.     IQueryable 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. 3.     IQueryable is best to query data from out-memory (like remote database, service) collections.
4.     While query data from database, IEnumerable execute select query on server side, load data in-memory on client side and then filter data. 4.     While query data from database, IQueryable execute select query on server side with all filters.
5.     IEnumerable is suitable for LINQ to Object and LINQ to XML queries. 5.     IQueryable is suitable for LINQ to SQL queries.
6.     IEnumerable supports deferred execution. 6.     IQueryable supports deferred execution.
7.     IEnumerable doesn’t supports custom query. 7.     IQueryable supports custom query using CreateQuery and Execute methods.
8.     IEnumerable doesn’t support lazy loading. Hence not suitable for paging like scenarios. 8.     IQueryable support lazy loading. Hence it is suitable for paging like scenarios.
9.     Extension methods supports by IEnumerable takes functional objects. 9.     Extension methods supports by IQueryable takes expression objects means expression tree.

IEnumerable Example

DataContext dc = new DataContext ();

IEnumerable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith(“G”));

list = list.Take<Employee>(10);

Generated SQL statements of above query will be :

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

Notice that in this query “top 10” is missing since IEnumerable filters records on client side

IQueryable Example

IQueryable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith(“G”));

list = list.Take<Employee>(10);

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

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

Lazy Loading?

Lazy loading is a concept where we delay the loading of the object until the point where we need it. Putting in simple words, on demand object loading rather than loading objects unnecessarily.

In .NET we have the Lazy<T> class which provides automatic support for lazy loading.

Advantages of lazy loading:

  • Minimizes start up time of the application.
  • Application consumes less memory because of on-demand loading.
  • Unnecessary database SQL execution is avoided.

Eager loading?.

So in eager loading we load all the objects in memory as soon as the object is created.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s