2014-05-14 6 views
-1

나는 전체 LINQ 시스템에 새로운 오전, 난 내 암호 해시 내 데이터베이스에서 VARBINARY 필드에 저장이, 지금은 내 데이터베이스에서 그 값을 얻을 바이트 배열에 저장하려면 LINQ를 사용하여 비교를 수행합니다. 나는 전에 이런 식으로 했어.LINQ VARBINARY C# 바이트 배열에

지금이 동일한 개념을 적용하지만 이번에는 LINQ를 사용하려고한다. 나는 이것을 시도했지만 작동하지 않았다 :

public bool Authenticate(string user, string pass) 
{ 
    ***LINQDataContext d = new ***LINQDataContext(); 

    var login = from us in d.Users 
       join ur in d.UserRoles on us.UserRoleID equals ur.UserRoleID 
       where us.Username == user 
       select us; 

    if ((login as IEnumerable<object>).Any()) 
    { 
     System.Web.HttpContext.Current.Session["UserID"] = login.FirstOrDefault().UserID.ToString(); 
     System.Web.HttpContext.Current.Session["UserRole"] = login.FirstOrDefault().UserRole.ToString(); 
     byte[] sqlbinary = (byte[]) login.FirstOrDefault().Password;; 

     return true; 
    } 

    return false; 
} 

그리고 난이 오류가 : enter image description here

+1

'login'은 무엇인가? 모든 구성원과 전체 코드 예제를 보여줘야합니다. –

+5

"가 작동하지 않았다"우리에게 * 실제로 무슨 일이 있었는지에 대해 조금 아주 *. 컴파일에 실패 했습니까? 컴파일되었지만 실행 시간 예외가 발생 했습니까? 자동으로 잘못된 데이터를 제공 했습니까? 자세한 정보를 제공하십시오. (*이 * 누군가가 질문을 당신에게 와서 그것을 해결하는 데 도움을 요구한다면, 알고 싶어 무엇을 생각해.) –

답변

4

이 오류는 LINQ에 의해 반환 된 컬렉션은 System.Data.Linq.Binary 객체이며, 당신이를 초기화하는 데 사용할 수 없음을 나타냅니다 byte[] 또는 명시 적으로 변환하지 마십시오.

첫째, 당신은 LINQ의 내장에서 ToArray() 함수를 사용하여 배열로 변환해야합니다.

사용

byte[] sqlbinary = login.FirstOrDefault().Password.ToArray(); 

이 잘되어야합니다.