2013-03-01 179 views
1

我有一個WCF服務操作的問題。我從數據庫獲得passwod值,當它通過時它返回false值。我究竟做錯了什麼?WCF服務操作總是返回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 2013-03-01 21:36:29

2

haslo代表字符串收集,而不是一個單獨的字符串。這意味着String.Equals(haslo,passwd文件)將始終返回false,因爲你比較字符串的集合到一個單獨的字符串 - 它們是兩種不同類型的對象。

你可以嘗試修改代碼如下。 FirstOrDefault()將返回集合中的第一個字符串,如果它爲空,則返回NULL。

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