Immediate Query Execution: It executes the LINQ query just after the preparation of that query using extension methods; even any instance created after that.
Deferred Execution: It first prepares the LINQ query and then executes that query but if any instance is created after preparation then will impact on that query.
To understand the Immediate and Deferred query execution in detail, we need to create a class named "MyClass" that has some properties like ID (int Type) and Name (string Type).
Deferred Query Execution
Until the created object is iterated the LINQ query will not fire or execute against the database. Use the following procedure to create a sample to explain it.
- We will create some instances of the preceding class as an array and store that into a var type variable named "lst".
- Then, filter the data (like ID, Name) from "lst" into a query variable named "Result" that you want to show.
- Iterate the "Result" variable to see the output one by one.
To get the output of this, run the following example.
Question: Are you thinking that the query executed at the time of
Step 2 from above?
Answer: No, the query will be executed at the time of Step 3, in other words iteration via the "foreach" loop. To prove this statement create 2 more instances of "MyClass" and add it to the "lst" variable.
lst.Add(new MyClass { ID = 8, Name = "H" });
lst.Add(new MyClass { ID = 9, Name = "I" });
To get the output of this, run the example:
Now it has been proven that the query has been prepared only before iteration and executed at the time of iteration.
Immediate Query Execution
We can do this execution when the query is being created and use extension methods like "Count" or "ToList" and so on.
Add the "ToList"
extension method to perform the Immediate Query Execution.
See the results as in the following:
It gives the 7 records even after adding 2 instances in the "lst" variable because "ToList"
executes the query just after preparation of the query and was not impacted by the 2 new instances.