有人可以解释为什么我的LINQ代码出现此错误?
LINQ to Entities无法识别方法'System.String GenerateHashWithSalt(System.String,System.String)'方法,并且此方法无法转换为商店表达式 .
var query = (from u in context.Users
where
u.Password ==
GenerateHashWithSalt(password, GetUserID(username))
select u).Count();
3 回答
您正在尝试将方法传递给EF,该方法尝试将该方法转换为已知的SQL命令 . SQL不知道
GenerateHashWithSalt(System.String, System.String)
您应该首先将结果分配给变量,然后生成Linq to Entity Query .
例
LINQ提供程序查看表达式树,并尝试从中生成等效的TSQL(等) . 这仅适用于已识别的方法或已识别的表达式方案 .
它无法查看C#代码中的任意方法并在数据库中执行该方法 .
然而!您可以简化它的查询:
它看起来像是shortcoming of LINQ to Entities
正如Jethro所说,并且上面的链接显示了一个示例,您需要将其转换为SQL知道的内容 .