22 January 2015

IEnumerable vs IQueriable

IEnumerable:


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


IEnumerable Example:


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


Generated SQL statements of above query will be:


SELECT EmpID, EmpName, Salary FROM Employee WHERE EmpName LIKE '%S%'


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


IQueryable:


-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.
-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 Example:


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


Generated SQL statements of above query will be :


SELECT TOP 10 EmpID, EmpName, Salary FROM Employee WHERE EmpName LIKE '%S%'


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

1 comment:

Ienumerable , List and Iqueryable | dotnetbb said...

[…] https://dotnetbysatya.wordpress.com/2015/01/22/ienumerable-vs-iqueriable/ […]