2009-06-15 9 views
2

J'utilise leCompter le résultat LINQ

suivant
var validLogin = from P in this.DataContext.Persons 
         where P.UserName.Equals(login) && P.Password.Equals(password) 
      select new 
      { 
       P.FirstName, 
       P.LastName, 
       P.EmailAddress 
      }; 

Dans ce maintenant je veux savoir, est-il résultat retourné par cette requête? Comment faire ça

+4

À côté: vous l'avez probablement déjà entendu, mais: essayez de évitez de stocker des mots de passe (même cryptés) - dans la plupart des cas, une vérification de hachage cryptographique et salée est suffisante, sans les risques de sécurité. –

Répondre

11

Ne pas utiliser Count() - utiliser Any() à moins que vous souciez réellement sur le nombre.

Vous pouvez réellement simplifier beaucoup, parce que vous n'utilisez pas le reste des résultats soit:

bool validLogin = DataContext.Persons.Any(p => p.UserName == login && 
               p.Password == password); 

La belle chose au sujet Any() est que tout ce qui est du traitement de la requête peut arrêter dès qu'il a trouvé aucun résultat correspondant - il n'a pas besoin de continuer à chercher d'autres correspondances potentielles. (Count() va travail bien sûr, ce n'est tout simplement pas aussi efficace, principalement parce que l'opérateur lui-même ne décrit pas ce que vous aimez vraiment avec précision.)

5

Cela devrait fonctionner:

if (validLogin.Count() > 0) 
{ 
    //do work 
} 
0

if (validLogin.Count() > 0){}

Questions connexes