Deferred Execution and Immediate Execution in LINQ

Posted by Dhananjay Kumar Articles | LINQ December 31, 2010
Deferred Execution executes a query only when a loop starts. What I mean here is that, we iterate through the query variable to get the result.
Reader Level:


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

Here the result variable does not contain the actual result. To get the result, we may iterate through the result (query) variable in a loop as many times as we want. We do deferred execution mainly when multiple values are 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

2.gif

Immediate Execution happens when LINQ query returns a single value.

3.gif

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

4.gif

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().

5.gif

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

6.gif

COMMENT USING

Trending up