如何在 LINQ 查询中使用自定义方法

问题描述 投票:0回答:1
我遇到以下问题:我目前正在开发 ASP.NET Core / Entity Framework Core 后端,并且遇到的问题是我需要在 LINQ 查询中使用自定义方法,并且在执行此操作时出现错误。

我研究并发现可以编写自定义函数,将其转换为 SQL,但我认为这样做的范围并不大(例如:SQL 将无法使用库和哈希字符串).

我听说过的另一种方法是将我的数据库转换为可枚举的,然后在其上应用我的自定义方法,这种方法可行,但性能不高,因为我将整个数据库保存在内存中,当拥有海量数据。

所以我的问题:是否有一个性能良好的解决方案来在 LINQ 查询中使用自定义方法?

我的具体问题是,我已将加盐密码散列保存在数据库中,当有人想要登录他的帐户时,我必须将数据库中的密码与盐+用户密码输入进行比较,该密码必须进行散列在我的 where 子句中。如果我不使用盐,它会起作用,因为那样,我只需要对用户输入进行哈希处理,这不是数据库的列。

c# linq entity-framework-core asp.net-core-webapi
1个回答
2
投票
您应该做的是 - 在后端计算哈希值和盐,并在 WHERE 语句中使用计算出的哈希值。在这种情况下,您不需要从 SQL 调用方法,也不需要将整个数据库(或表)拉入内存来计算哈希值。

由于我不知道你的代码,伪代码方法是:

var user = service.GetUserByEmail(email); if (user == null) { //Invalid User } var hash = ComputeHash(user.Salt, inputPwd); if(user.PasswordHash == hash) { //User is logged in } else { //Invalid Password or email }
    
© www.soinside.com 2019 - 2024. All rights reserved.