C# LINQ deferred execution, multiple enumeration and yield return

C# Language Interview Q&A November 13, 2026 csharp

A LINQ query does not run when you write it, but when you enumerate it (foreach, ToList, Count, First).

csharp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// ======================================================================
// Q: What is deferred execution in LINQ?
//
// A LINQ query does not run when you write it, but when you enumerate it
// (foreach, ToList, Count, First). Each new enumeration runs it again (with EF:
// a new database query).
// ======================================================================

var query = db.Orders.Where(o => o.Status == OrderStatus.Placed);   // nothing yet
var count = query.Count();       // query 1
var list  = query.ToList();      // query 2: multiple enumeration

IEnumerable<int> Numbers()
{
    for (var i = 0; ; i++) yield return i;    // lazy: produces only as many as requested
}
var firstFive = Numbers().Take(5).ToList();