The first important point to remember is “
IQueryable
” interface inherits from “IEnumerable
”, so whatever “IEnumerable
” can do, “IQueryable
” can also do.There are many differences but let us discuss about the one big difference which makes the biggest difference. “
IQueryable
”
interface is useful when your collection is loaded using LINQ or Entity
framework and you want to apply filter on the collection.Consider the below simple code which uses “
IEnumerable
” with entity framework. It’s using a “where
” filter to get records whose “EmpId
” is “2
”.IEnumerable<Employee> emp = ent.Employees;
IEnumerable<Employee> temp = emp.Where(x => x.Empid == 2).ToList<Employee>();
This where
filter is executed on the client side where the “IEnumerable
” code is.
In other words,
all the data is fetched from the
database and then at the client it scans
and gets the record with “EmpId
” is “2
”.
But now see the below code we have changed “IEnumerable
” to “IQueryable
”.IQueryable<Employee> emp = ent.Employees;
IEnumerable<Employee> temp = emp.Where(x => x.Empid == 2).ToList<Employee>();
In this case, the filter is applied on the database using the “SQL”
query. So the client sends a request and on the server side, a select
query is fired on
the database
and only necessary data is returned.
So the difference between “IQueryable
” and “IEnumerable
” is about where the filter logic is executed. One executes on the client side and the other executes on the database.So if you are working with only in-memory data collection “
IEnumerable
” is a good choice but if you want to query data collection which is connected with database, “IQueryable
” is a better choice as it reduces network traffic and uses the power of SQL language. Below is a nice FB video which demonstrates this blog in a more visual and practical manner.
No comments:
Post a Comment