LINQ Varbinary到C#字节数组

时间:2014-05-14 09:48:12

标签: c# linq-to-sql bytearray varbinary

我是整个LINQ系统的新手,我将密码哈希并存储在我的数据库的varbinary字段中,现在我想从我的数据库中获取该值并将其存储在字节数组中以使用LINQ进行比较。我之前做过这样的事情:

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 个答案:

答案 0 :(得分:5)

此错误表示LINQ返回的集合是System.Data.Linq.Binary对象,您无法使用它来初始化byte[],也无法明确转换它。

首先,您需要将其转换为数组,使用LINQ的内置ToArray()函数。

使用

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

应该没问题。