A LINQ query can be written to fetch
the results immediately or at a latter point in time. To keep it
simple, LINQ queries are often executed when the query is iterated
over (via a foreach loop) — as opposed to when the query variable is
created. This is considered a “deferred” execution; however,
queries can also be immediately executed when needed. For example,
immediate execution is useful when the query results need to be
cached or re-used.
the results immediately or at a latter point in time. To keep it
simple, LINQ queries are often executed when the query is iterated
over (via a foreach loop) — as opposed to when the query variable is
created. This is considered a “deferred” execution; however,
queries can also be immediately executed when needed. For example,
immediate execution is useful when the query results need to be
cached or re-used.
From a syntax perspective, a query will
execute immediately when the query returns a singleton (Min, Max,
Count, Average, etc) or when it ends with .ToList, .ToArray,
.ToDictionary, etc.
execute immediately when the query returns a singleton (Min, Max,
Count, Average, etc) or when it ends with .ToList, .ToArray,
.ToDictionary, etc.
Deferred Example:
public static void DelayedExecString()
{
//Create some data
string[] bikes = new string[] { “Yamaha”, “Honda”, “Ducati”, “Suzuki” };
//Build LINQ query
var simpleQuery =
from bike in bikes
select bike
;
//Query is NOW executed in a deferred manner
foreach (var type in simpleQuery)
{
Console.WriteLine(“Bike type is {0}”, type);
}
Console.ReadLine();
}
Immediate Example:
public static void ImmediateExecString()
{
//Create some data
string[] bikes = new string[] { “Yamaha”, “Honda”, “Ducati”, “Suzuki” };
//Build LINQ query
var simpleQuery = (
from bike in bikes
select bike).ToList(); //Query is NOW executed immediately
foreach (var type in simpleQuery)
{
Console.WriteLine(“Bike type is {0}”, type);
}
Console.ReadLine();
}