我是整个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;
}
我收到此错误:
答案 0 :(得分:5)
此错误表示LINQ返回的集合是System.Data.Linq.Binary
对象,您无法使用它来初始化byte[]
,也无法明确转换它。
首先,您需要将其转换为数组,使用LINQ的内置ToArray()
函数。
使用
byte[] sqlbinary = login.FirstOrDefault().Password.ToArray();
应该没问题。