LINQ Varbinary到C#字节数组

Bla*_*jok 1 c# bytearray varbinary linq-to-sql

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

System.Data.SqlTypes.SqlBytes sqlPassBinary = dr.GetSqlBytes(dr.GetOrdinal("Password"));
Run Code Online (Sandbox Code Playgroud)

现在我想尝试应用这个相同的概念,但这次使用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;
}
Run Code Online (Sandbox Code Playgroud)

我得到这个错误: 在此输入图像描述

Kam*_*l T 6

此错误表示LINQ返回的集合是一个System.Data.Linq.Binary对象,您不能使用它来初始化byte[],也不能显式转换它.

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

使用

byte[] sqlbinary = login.FirstOrDefault().Password.ToArray();
Run Code Online (Sandbox Code Playgroud)

应该没问题.