2013-03-01 131 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);