results
lui-même est juste une requête. Jusqu'à ce que vous commenciez à itérer (soit explicitement ou via un appel comme Count()
), rien n'a vérifié s'il y a des résultats ou pas. C'est seulement quand vous l'énumérez que tout va arriver.
Vous pourriez faire:
foreach (int x in results)
{
Console.WriteLine("This won't happen");
}
Ou:
Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0
Chacune de ces causerez le prédicat à évaluer pour chaque élément de la gamme ... mais avant, il a gagné Ne sois pas appelé du tout.
Ceci est une chose importante à comprendre, car cela signifie que results
ne pouvait pas êtrenull
tout en conservant la fonction de l'évaluation paresseuse - jusqu'à ce que vous avez essayé d'utiliser results
, il n'aurait pas fonctionné si elle devrait être null
ou pas!
Ce qui se trouverait dans "results" est * un objet qui représente la requête *. Rappelez-vous: l'objet de requête n'est pas le résultat de la requête. L'objet de requête est quelque chose que vous pouvez * itérer pour obtenir les résultats de la requête *, ce n'est pas le résultat lui-même. –