2013-03-01 4 views
1

WCF 서비스 작업에 문제가 있습니다. 데이터베이스에서 passwod 값을 가져오고 통과해야하는 경우 false 값을 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 당신은 (어떤 된 IQueryable /를 IEnumerable 반대)에 전달 된 암호를 사용하여 하나의 검색 항목을 비교하려면 같은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

보인다. 이 경우, 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

haslo 문자열의 수집 아닌 개별 문자열을 나타냅니다. 즉 문자열의 컬렉션을 개별 문자열로 비교하기 때문에 String.Equals (haslo, passwd)는 항상 false를 반환합니다. 이는 두 가지 유형의 객체입니다.

다음과 같이 코드를 수정할 수 있습니다. FirstOrDefault()는 컬렉션의 첫 번째 문자열을 반환하거나 비어 있으면 NULL을 반환합니다.

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