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.