【问题标题】:LINQ Varbinary to C# Byte ArrayLINQ Varbinary to C# 字节数组
【发布时间】:2014-05-14 09:48:12
【问题描述】:

我是整个 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;
}

我得到这个错误:

【问题讨论】:

  • 什么是login?您需要向所有成员展示完整的代码示例。
  • “它不起作用”告诉我们非常很少了解实际发生的情况。是不是编译失败了?它是否编译但给出了执行时异常?它是否默默地给了你不正确的数据?请提供更多信息。 (想想如果有人向您提出问题并要求您帮助解决问题,您想知道什么。)

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


【解决方案1】:

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

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

使用

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

应该没问题的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多