当我执行以下代码时,出现错误:
System.InvalidOperationException:无法翻译 LINQ 表达式 'DbSet.Where(u => u.NormalizedEmail == __ToLower_0 && u.PasswordHash.SequenceEqual(__pass_1))'
但它在 .NET Core 2.2 中运行良好。.NET Core 3.1 中引发错误。
loginCreds.Password = loginCreds.Password.ToLower();
var pass = Helper.ComputeHash(loginCreds.Password);
var usr = await _context.Users
.FirstOrDefaultAsync(u => u.NormalizedEmail == loginCreds.Email
&& u.PasswordHash.SequenceEqual(pass));
Run Code Online (Sandbox Code Playgroud)
但是,当我替换u.PasswordHash.SequenceEqual(pass)为u.PasswordHash == new byte[16](仅用于测试)时,它起作用了。所以,问题是SequenceEqual(byte[] byte)方法。
我该如何解决这个问题?
我正在尝试添加参数SqlCommand,但它插入参数名称而不是参数值.
这是代码片段:
var QueryString1 = "Insert into UsersTable (Username, Password, IsAdmin, Email, Budget, Phone) " +
"values ('@Un', '@P','" + user.IsAdmin + "', '@E', '@B', '@Ph')";
using (SqlCommand command = new SqlCommand(QueryString1, con))
{
command.Parameters.Add("@Un", SqlDbType.Text);
command.Parameters["@Un"].Value = user.UserName;
command.Parameters.Add("@P", SqlDbType.Text);
command.Parameters["@P"].Value = user.Password;
command.Parameters.Add("@E", SqlDbType.Text);
command.Parameters["@E"].Value = user.Email;
command.Parameters.Add("@B", SqlDbType.Text);
command.Parameters["@B"].Value = user.Budget.Amount + "-" + user.Budget.Currency;
command.Parameters.Add("@Ph", SqlDbType.VarChar);
command.Parameters["@Ph"].Value = user.Phone;
if (command.ExecuteNonQuery().Equals(0))
{
con.Close();
return InternalServerError();
}
con.Close();
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
抱歉模糊记录:)