为什么“ LINQ表达式'x'无法翻译”?我没有使用“ Where()” - c#

当我执行以下代码时,出现错误:

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));

但是,当我用u.PasswordHash.SequenceEqual(pass)替换u.PasswordHash == new byte[16](仅用于测试)时,它可以工作。因此,问题出在SequenceEqual(byte[] byte)方法上。

我该如何解决?

任何意见将不胜感激。

参考方案

您说它在dotnet core 2.2中有效,但在dotnet core 3.1中无效。我假设这意味着您还在Entity Framework Core 3版本中使用dotnet core 3.1,看起来这是Entity Framework Core 3中的重大更改。 See here。

旧行为
在3.0之前的版本中,当EF Core无法将查询中包含的表达式转换为SQL或参数时,它将自动在客户端上评估该表达式。默认情况下,客户端对潜在昂贵表达式的评估只会触发警告。
新行为
从3.0开始,EF Core仅允许在客户端上评估顶级投影(查询中的最后一个Select()调用)中的表达式。当查询的任何其他部分中的表达式无法转换为SQL或参数时,将引发异常。

SequenceEqual无法转换为SQL或参数,因此在版本2.2中,它是在客户端上自动执行的。现在在3.1版本中,它会抛出一个InvalidOperationException。使用相等运算符是可行的,因为可以将其转换为SQL语句。
为了解决此问题,为什么不按Email选择然后比较密码?

loginCreds.Password = loginCreds.Password.ToLower();
var pass = Helper.ComputeHash(loginCreds.Password);
var usr = await _context.Users
    .FirstOrDefaultAsync(u =>u.NormalizedEmail == loginCreds.Email));
bool validUser = false;
if (usr != null)
{
    validUser = usr.PasswordHash.SequenceEquals(pass);
}
// if validUser is true, then the credentials were valid.

输入URL字段时,出现错误“远程URL测试失败:不支持协议'git clone HTTPS'” - java

当我单击“定义远程”时,输入在Android Studio的Bitbucket站点中提供的HTTPS URL时,出现错误远程URL测试失败:不支持协议'git clone https'我使用了SSH URL,这给了我错误远程URL测试失败:警告:将IP地址“ 18.205.93.0”的RSA主机密钥永久添加到已知主机列表中。无法从远程存储库读取。我什至尝试从…

有没有一种方法可以使用PythonInterpreter将python代码的输出值(例如“ print('python code')”)返回到String或其他对象中 - java

我正在尝试使用java做一个简单的python解释器。基本上,您编写一些python代码,例如print('hello world'),然后将请求发送到Spring Boot后端应用程序,该应用程序使用PythonInterpreter库解释代码,并以JSON对象形式返回结果,例如:{ "result": "hello worl…

将字符串分配给numpy.zeros数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

TypeError:'str'对象不支持项目分配,带有json文件的python - python

以下是我的代码import json with open('johns.json', 'r') as q: l = q.read() data = json.loads(l) data['john'] = '{}' data['john']['use…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。