C# · Intermediário · Inglês · Técnico
deferred execution
Comportamento do LINQ em que a consulta só é executada quando o resultado é enumerado (foreach, ToList, Count), e não na linha em que ela é escrita.
Onde usar
Aparece em bugs em que a lista 'mudou sozinha' ou a consulta rodou duas vezes. Materializar com ToList quando precisar de um retrato estável evita enumerações repetidas.
Em código
var nums = new List<int> { 1, 2, 3 };
var q = nums.Where(n => n > 1);
nums.Add(4);
Console.WriteLine(q.Count()); // 3Exemplos
That's deferred execution, the query hasn't run yet.
Isso é deferred execution, a consulta ainda não rodou.
Call ToList to stop the deferred execution from repeating.
Chame ToList para a deferred execution não se repetir.
Cuidado
Não presuma que var q = lista.Where(...) já filtrou: q é só a definição da consulta e reflete mudanças feitas em lista antes de enumerar.
Sinônimos
execução adiada, lazy evaluation
Antônimos
execução imediata