LINQ provides a
common query syntax to query any data source. In a LINQ query, you
always work with objects. The object may in-process object or
out-process object. Based on objects, LINQ query expression is
translated and executed. There are two ways of LINQ query execution
as given below:
Deferred
Execution
In case of differed
execution, a query is not executed at the point of its declaration.
It is executed when the Query variable is iterated by using loop like
as for, foreach.
DataContext context
= new DataContext();
var query = from
customer in context.Customers
where customer.City
== "Delhi"
select customer; //
Query does not execute here
foreach (var
Customer in query) // Query executes here
{
Console.WriteLine(Customer.Name);
}
A LINQ query
expression often causes deferred execution. Deferred execution
provides the facility of query reusability, since it always fetches
the updated data from the data source which exists at the time of
each execution.
Immediate
Execution
In case of immediate
execution, a query is executed at the point of its declaration. The
query which returns a singleton value (a single value or a set of
values) like Average, Sum, Count, List etc. caused Immediate
Execution.
You can force a
query to execute immediately of by calling ToList, ToArray methods.
DataContext context
= new DataContext();
var query = (from
customer in context.Customers
where customer.City
== "Delhi"
select
customer).Count(); // Query execute here
Immediate execution
doesn't provide the facility of query re-usability since it always
contains the same data which is fetched at the time of query
declaration.