Les meilleures pratiques de SingleOrDefault()
Je veux faire de mon mieux. Je peux réécrire le premier exemple à la seconde?
IQueryable<PDF> pdfList = (from pdfobj in pdfDataContext.PDFs
where pdfobj.Id == pdfId
select pdfobj);
if (pdfList.Count() > 0)
{
PDF pdfOldWay = pdfList.FirstOrDefault();
pdfOldWay. //do something. (pdfOldWay can't be null here...)
}
--
PDF pdfNewWay = (from pdfobj in pdfDataContext.PDFs
where pdfobj.Id == pdfId
select pdfobj).SingleOrDefault();
if (pdfNewWay != null)
{
//do something
}
--
EDIT:
Désolé de ne pas être clair. Mon problème est d'obtenir l'objet PDF directement sans avoir à utiliser une liste de la première. Je ne veux pas faire un chèque pour le compteur est supérieur à 0 et parce qu'il n'a tout simplement pas l'air bon.
Il serait vraiment utile si vous pouviez format de votre code d'échantillons, de sorte qu'ils ne nécessitent pas de défilement - en particulier lorsque le défilement du contenu est essentiel. Je vais modifier ça maintenant, mais si vous pouviez le faire vous-même à l'avenir, il serait apprécié.
Désolé. Sûr que je vais le faire dans l'avenir.
Qu'entendez-vous par "sécurité", la deuxième peut lever une exception que la première ne serait pas. Ne sorte de coffre-fort pour dire la même fonctionnalité? ou n'implique quelque chose d'autre?
est-il vrai que l'appel à SingleOrDefault() ne peut pas jeter un NullPointException? Parce que je ne connais pas la réponse pour que je maded la première (piraté?) solution.
FirstOrDefault ou SingleOrDefault sont le mieux dans votre cas. Dans d'autres cas où vous vous attendez à plus d'un résultat de l'utilisation .() Au lieu de Count > 0. Le comptage est beaucoup plus cher que juste de voir si il n'y a rien là.
Désolé. Sûr que je vais le faire dans l'avenir.
Qu'entendez-vous par "sécurité", la deuxième peut lever une exception que la première ne serait pas. Ne sorte de coffre-fort pour dire la même fonctionnalité? ou n'implique quelque chose d'autre?
est-il vrai que l'appel à SingleOrDefault() ne peut pas jeter un NullPointException? Parce que je ne connais pas la réponse pour que je maded la première (piraté?) solution.
FirstOrDefault ou SingleOrDefault sont le mieux dans votre cas. Dans d'autres cas où vous vous attendez à plus d'un résultat de l'utilisation .() Au lieu de Count > 0. Le comptage est beaucoup plus cher que juste de voir si il n'y a rien là.
OriginalL'auteur radbyx | 2010-12-28
Vous devez vous connecter pour publier un commentaire.
Oui, c'est sûr. Vous pouvez également simplifier votre requête légèrement:
La seule différence entre SingleOrDefault et FirstOrDefault est que SingleOrDefault va lever une exception si plus d'une correspondance est trouvée, de sorte que si vous voulez cette case, alors vous pouvez aussi bien coller à FirstOrDefault.
pas vrai
Non, c'est vrai.
SingleOrDefault
ne va pas lancer une exception, qui pourrait être ce que vous vouliez dire?OriginalL'auteur MarkXA
Vous devez utiliser FirstOrDefault dans le second cas, aussi, comme SingleOrDefault va lever une exception si il n'y a plus d'un élément. Est-ce possible pour vous?
D'autre part, si vous voulez vous assurer qu'il n'existe qu'un pdfobject pour certains, l'id que d'utiliser SignleOrDefault est mieux.
C'est vrai aussi, thx. J'ai marqué les autres répondre, car elle m'a aussi aidé à simplifier mon code.
OriginalL'auteur Giorgi
Si il est garanti qu'il a toujours 0 ou 1 lignes, c'est sûr que, SingleOrDefault est la meilleure solution.
A côté de cela, je suis totalement d'accord avec vous - ty.
OriginalL'auteur fejesjoco
Oui, vous permettra d'atteindre le même résultat, je ne vois pas de problème.
OriginalL'auteur Amit Bagga