results
en sí es solo una consulta. Hasta que no comience a recorrerlo (ya sea explícitamente o mediante una llamada como Count()
), nada ha comprobado si hay algún resultado o no. Solo cuando lo enumera todo sucederá.
Por lo que podría hacer:
foreach (int x in results)
{
Console.WriteLine("This won't happen");
}
O:
Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0
Cualquiera de estos hará que el predicado se evaluará en cada elemento de la gama ... pero antes de eso, se ganó no se llamará en absoluto.
Esto es una cosa importante de entender, ya que significa que no results
podría ser null
mientras que conserva la función de la evaluación perezosa - hasta que se trató de usoresults
, no habría funcionado si debe ser null
o no!
Lo que estaría en "resultados" es * un objeto que representa la consulta *. Recuerde: el objeto de consulta NO es el resultado de la consulta. El objeto de consulta es algo que puede * iterar para obtener los resultados de la consulta *, no es en sí mismo el resultado. –