2009-06-15 3 views
2

Я использую следующийПодсчет результатов LINQ

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 
      }; 

В этом сейчас я хочу знать, есть ли результат, возвращаемый этим запросом? Как это сделать.

+4

Кроме того, вы, наверное, слышали это раньше, но: попробуйте избегать хранения паролей (даже зашифрованных) - для большинства целей достаточно криптографического, соленого хэша, без рисков безопасности. –

ответ

11

Не используйте Count() - использовать Any(), если вы на самом деле не заботиться о счете.

Вы можете реально упростить это много, потому что вы не используете остальные результаты либо:

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

Хорошая вещь о Any() является то, что все, что это обработка запроса может остановиться, как только он найден любые соответствующие результаты - ему не нужно продолжать поиск других потенциальных совпадений. (Count() будет Работа, конечно, это не так эффективно, в основном потому, что сам оператор не описывает то, что вас действительно волнует как точно.)

5

Это должно работать:

if (validLogin.Count() > 0) 
{ 
    //do work 
} 
Смежные вопросы