2012-11-10 6 views
0

사용자 인증 방법이 있지만 테이블에 레코드가 있어도 user = null을 반환합니다.이 Linq이 null을 반환하는 이유는 무엇입니까?

public bool AuthenticateUser(string username, string password) 
{ 
    var user = GetSingleRow(c => c.Email.Equals(username) && c.Password.Equals(password) && IsActive); 

    if(user !=null && user.Id > 0) 
    { 
    // my statements 
    } 
} 

클래스 & 방법의 구현 :

public partial class UserAccount :IRepository<UserAccount> 
{ 
    private static readonly MeriRanchiDataContext Context; 
    public UserAccount GetSingleRow(Func<UserAccount, bool> criteria) 
    { 
     return Context.UserAccounts.Where(criteria).SingleOrDefault(); 
     //tried this also: return Context.UserAccounts.SingleOrDefault(criteria); 
    } 
} 
+7

데이터베이스에 일반 텍스트 비밀번호가 있습니까? 또한 표현식 트리 대신 델리게이트를 사용하기 때문에 사용자 계정을 모두 * 가져 와서 해당 술어를 로컬에서 적용한다는 사실을 알고 있습니까? –

+0

데이터베이스에 일반 텍스트 비밀번호를 저장하려고합니다. –

+0

@JonSkeet "또한 표현식 트리 대신 대리인을 사용하기 때문에 모든 사용자 계정을 가져 와서 로컬에서 조건부를 적용 할 것임을 알고 있습니까?" "이것은 술어를 사용하는 잘못된 접근입니까?" –

답변

4

당신은이 isActive에서 범위 변수 (c)를 놓치고있어. 수행 :

var user = GetSingleRow(c => c.Email.Equals(username) && c.Password.Equals(password) && c.IsActive); 
관련 문제