7
votes

Meilleur moyen de déterminer null ou compter 0

J'ai un iquisable et j'ai besoin de savoir s'il est nul ou n'a aucune valeur.

IQueryable<people> L = (from p in people 
                        where p.lastname.Contains("y") 
                        select p);
if (L != null && L.Count() > 0) {
   return "Something";
} else {
   return "NOTHING";
}


3 commentaires

Si vous appelez SIMOREFAULT , comment peut-on l être un iquéryable ?


Vous êtes correct, je n'avais pas .Singleordfault dans mon code. Veuillez éditer cela dans votre esprit.


Vous pouvez modifier votre question en cliquant sur le modifier le lien ci-dessous de votre question.


4 Réponses :


5
votes

Il est recommandé d'utiliser . Nan () code>.

IQueryable<people> L = (from p in people 
                        where p.lastname.Contains("y") 
                        select p);
if (L.Any()) {
   return "Something";
} else {
   return "NOTHING";
}


3 commentaires

Nous avons effectué la comparaison de code et .Count vs . Nan étaient presque identiques. Mais j'aime bien le mieux. Je n'ai pas vérifié comment SQL y traite, mais je peux le faire plus tard. Merci!


Dans le cas où l'énumérable est vide ou n'a qu'une ou deux valeurs, ou lorsque la méthode est appliquée directement sur une source iEnumerable qui est également identifiable comme une iCollection ou une matrice (et ayant ainsi une propriété de comptage ou de longueur), compte ( ) jouera à peu près la même chose que tout (). Où tout () brille vraiment est dans de longues collections; Tout () fonctionne constamment (O (1)), tandis que le nombre () fonctionne de manière linéaire (O (n)). Les deux sont "rapides" par la plupart des mesures algorithmiques, mais tout () plus vite.


LINQ à SQL, cadre d'entité et récents fournisseurs de NHibernate Tous gérer tout de manière spéciale et performante. Vous pouvez voir un exemple de ce qu'il génère en utilisant Linqpad. Plutôt cool.



1
votes

l.any () , l.firstordefault () sera à peu près la même performance qu'ils ont presque identique à la mise en œuvre et sont probablement ce que vous recherchez . Votre SingleEfault est probablement involontaire car il organisera une exception s'il y a plus d'un résultat.

Performance de Linq Toute vs FirstOrdefault! = null

Cela vaut la peine de dire que certaines choses dépendent de votre fournisseur. Iquéryable implique juste une intention. Si c'est linq2sql ou quelque chose, oui l.Count () demandera plus de ressources - sauf que vous appelez également SingleEfault dans la ligne ci-dessus, ce qui signifie que votre chèque NULL est tout ce dont vous avez besoin, mais vos types ne correspondent pas ...

Si j'exécute cette déclaration contre un fournisseur LINQ, je vous écris (ou des Amazones, ou tout autre fournisseur de Linq) .Count () pourrait être plus rapide en fonction de ce que le fournisseur fait, mais Vos hypothèses contiennent si vous utilisez les implémentations habituelles Microsoft Linq vers SQL.


0 commentaires

1
votes

Un exemple d'utilisation de la méthode. Nany xxx

Ceci est un exemple qui retournerait une iquérissable si le. Nany revient vrai, mais cela pourrait être trop inefficace car il nécessite deux voyages ronds. à la base de données. Je suis sûr qu'une meilleure méthode pourrait être écrite, étant donné assez de temps et de pensée. xxx


0 commentaires

3
votes

Est-ce que je doit être iquéryable <>? de
En utilisant SO2ODEFAULAULAULLAULT (), il s'agira d'un peuple célibataire (personne?) Ou NULL (supposer que les gens est une classe) xxx

est célibatairefault () ce que vous Voulez-vous utiliser ou voulez-vous dire FirstAdefault () ou voulez-vous dire?

Peut-être LINQ: Quand utiliser SIMOREFAULT VS. DE FRESTEDEFAULT () avec des critères de filtrage peut aider.

HTH,
Alan.


0 commentaires