9
votes

LINQ Resulde quand il n'y a pas de matchs?

Que retourne une fonction LINQ quand il n'y a pas de correspondance? Prenez la méthode de l'endroit, par exemple: xxx

quel serait dans les résultats à ce stade?


1 commentaires

Que serait dans "Résultats" est un objet qui représente la requête . N'oubliez pas: L'objet de requête n'est pas les résultats 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 lui-même les résultats.


3 Réponses :


3
votes

une référence à un Ienumerable vide .


3 commentaires

Excellent! C'est ce que je cherchais. Je voulais être sûr de ne pas avoir à vérifier NULL.


Nitpick: une référence à un ienumerable vide - pas une collection


@Mark Oui, j'ai pensé à clarifier.



4
votes

Dans ce cas, il renvoie un ienumerable avec un nombre de 0 éléments.


2 commentaires

Cela fait que ça sonne comme s'il "sait" il y a un nombre de 0 - que ce n'est pas le cas. La valeur renvoyée est un iEnumerable qui, lors de l'itération terminé, donnera 0 articles. Cela ne sait pas qu'avant, il doit essayer le prédicat contre chaque valeur pour le savoir, et cela ne le fait pas avant de le demander.


@Jon: Certainement, merci de clarifier. Comme vous l'avez mentionné dans votre message, il doit être utilisé pour déterminer le résultat.



12
votes

résultats code> est juste une requête. Jusqu'à ce que vous commenciez à y parcourir (explicitement ou via un appel comme comptez () code>), rien n'a vérifié s'il existe des résultats ou non. Ce n'est que lorsque vous l'énumérant que quelque chose se produira.

Donc, vous pouviez faire: P>

Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0


2 commentaires

J'ai tout oublié d'évaluation paresseux. smacks auto


Notez que la "question" dont vous parlez est vraiment un iNeumable d'une sorte qui n'a pas renseigné ses données ...