Deferred Execution and Immediate Execution in LINQ

Deferred Execution executes the query only when Loop starts. What I mean here is that, we iterate through the query variable to get the result.
  

clip_image001

  

Here the result variable does not contain the actual result. To get the result, we may iterate through the result (query) variable in loop as many time as we want. We do deferred execution mainly when multiple values is being returned from the query.

  

Example

  


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
 class Program
 {
 static void Main(string[] args)
 {
 DataClasses1DataContext context = new DataClasses1DataContext();
 var result = from r in context.Persons select r;
 foreach (var a in result)
 {
 Console.WriteLine(a.FirstName + "" + a.LastName);
 }
 Console.ReadKey(true);

 }
 }
}

  

Output
clip_image003

  

Immediate Execution happens when LINQ query returns a single value.

  

clip_image005

  

Above query is returning a single value so it can be executed immediately.

  

Example

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
 class Program
 {
 static void Main(string[] args)
 {
 DataClasses1DataContext context = new DataClasses1DataContext();
 var numberOfRecords = (from r in context.Persons select r).Count();
 Console.WriteLine(numberOfRecords);
 Console.ReadKey(true);

}
 }
}

  

Output
clip_image007

  

If we want to make a query returning multiple values or sequence of values as immediate then we need to explicitly convert the result in ToList().

  

clip_image009

  

So above query is returning multiple values and would be executed immediately.
Example

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication3
{
 class Program
 {
 static void Main(string[] args)
 {
 DataClasses1DataContext context = new DataClasses1DataContext();
 var result1 = (from r in context.Persons select r).ToList();
 foreach (var a in result1)
 {
 Console.WriteLine(a.FirstName + "" + a.LastName);
 }
 Console.ReadKey(true);
 }
 }
}
Output
clip_image011

Discover more from Dhananjay Kumar

Subscribe to get the latest posts sent to your email.

Published by Dhananjay Kumar

Dhananjay Kumar is founder of NomadCoder and ng-India

One thought on “Deferred Execution and Immediate Execution in LINQ

Leave a comment

Discover more from Dhananjay Kumar

Subscribe now to keep reading and get access to the full archive.

Continue reading