2013-03-01 3 views
1

У меня проблема с работой службы WCF. Я получаю значение passwod из базы данных, и когда он должен передать это значение, возвращайте ложное значение. Что я делаю не так?Операция WCF Service всегда возвращает false

public bool LogIn(string userId, string passwd) 
    { 
     bool prompt; 
     ProgDBEntities context = new ProgDBEntities(); 

     IQueryable<string> haslo = (from p in context.UserEntity where p.UserID == userId select p.Passwd); 


     bool passOk = String.Equals(haslo, passwd); 


     if (passOk == true) 
     { 
      prompt = true;     
     } 
     else 
     { 
      prompt = false;    
     } 
     return prompt; 
    } 

ответ

3

Похоже, вы хотите сравнить один найденную запись с паролем, который был принят в (в отличие от любого IQueryable/IEnumerable). Для этого попробуйте использовать метод FirstOrDefault:

public bool LogIn(string userId, string passwd) 
    { 
     bool prompt; 
     ProgDBEntities context = new ProgDBEntities(); 

     var haslo = (from p in context.UserEntity where p.UserID == userId select p.Passwd).FirstOrDefault(); 

     // No need to use String.Equals explicitly 
     bool passOk = haslo == passwd; 


     if (passOk == true) 
     { 
      prompt = true;     
     } 
     else 
     { 
      prompt = false;    
     } 
     return prompt; 
    } 
+0

Это работает: D Большое вам спасибо :) – bohunn

2

hasło представляет коллекцию строк, а не отдельной цепочки. Это означает, что String.Equals (haslo, passwd) всегда будет возвращать значение false, поскольку вы сравниваете строки строк с отдельной строкой - это два разных типа объектов.

Вы можете попробовать изменить код следующим образом. FirstOrDefault() вернет первую строку в коллекции или NULL, если она пуста.

bool passOk = String.Equals(haslo.FirstOrDefault(), passwd); 
Смежные вопросы