2014-05-14 65 views
-1

我是新來的整個LINQ系統,我有我的密碼哈希和存儲在varbinary字段在我的數據庫中,現在我想從我的數據庫中獲取該值,並將其存儲在一個字節數組使用LINQ做比較。我之前是這麼做的:LINQ Varbinary到C#字節數組

System.Data.SqlTypes.SqlBytes sqlPassBinary = dr.GetSqlBytes(dr.GetOrdinal("Password")); 

現在我想嘗試和應用這個相同的概念,但這次使用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

什麼是「登錄」?您需要爲所有成員顯示完整的代碼示例。 –

+5

「它沒有工作」告訴我們*實際發生的事情很少*。它編譯失敗了嗎?它是否編譯,但給出執行時異常?它是否默默地給你提供不正確的數據?請提供更多信息。 (想想你是否想知道是否有人問你這個問題,並要求你幫助解決。) –

回答

4

此錯誤表示通過LINQ返回的集合是一個System.Data.Linq.Binary對象,你不能用它來初始化byte[],也沒有明確地轉換它。

首先,你需要將它轉換爲數組,使用LINQ內置的ToArray()函數。

使用

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

應該就好了。