IntroductionThe following example shows how query execution is deferred until the results is enumerated (requested in other words.) static void TryLinq()
{
int i = 0;
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// fake values for the query only (10 values)var result = from n in numbers select Increment(ref i);
Console.WriteLine("After query i = {0}", i); // i still 0Console.WriteLine();
Console.WriteLine("Enumerating results:");
foreach (var v in result)
{
Console.WriteLine("v = {0},ti = {1}", v, i);
// i is incremented every loop}
Console.WriteLine("Press any key to continue . . .");
Console.ReadKey(true);
}
// Result:- // After query i = 0
// Enumerating results: // v = 1, i = 1 // v = 2, i = 2 // ............. // v = 9, i = 9 // v = 10, i = 10
// What you get? // Deferred-Execution / Lazy-Execution // - Query doesn't execute until you // begin retrieving it's results. // - Every time you try get a value // the query executes on this value only. Next is an example shows how you can immediate-execute the query. static void TryLinq()
{
int i = 0;
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// fake values for the query only (10 values)var result =
(from n in numbers select Increment(ref i)).ToList();
// The last call tries to get the value immediately.Console.WriteLine("After query i = {0}", i); // i is 10Console.WriteLine();
Console.WriteLine("Enumerating results:");
foreach (var v in result)
{
Console.WriteLine("v = {0},ti = {1}", v, i);
// i still 10 every loop}
Console.WriteLine("Press any key to continue . . .");
Console.ReadKey(true);
// Result:-// After query i = 10// Enumerating results:// v = 1, i = 10// v = 2, i = 10// .............// v = 9, i = 10// v = 10, i = 10// What you get?// Deferred-Execution / Lazy-Execution// - Query doesn't execute until you// begin retrieving it's results.// - Every time you try get a value the// query executes on this value only.// - You can immediate-execute the query by// calling some conversation methods like// ToList or ToQuery.}
static int Increment(ref int i) { return ++i; }
What you get?
Deferred-Execution / Lazy-Execution - Query doesn't execute until you begin retrieving it's results.
- Every time you try get a value the query executes on this value only.
- You can immediate-execute the query by calling some conversation methods like ToList or ToQuery.
|