2

我有一个功能来检索用户详细信息

我加密了几个领域。我想知道 LINQ 将如何执行实际的 sql 查询

public User GetUserByEmail(string email)
{
      return _db.Users.Where(x => x.LastName.Decrypt() == "Patel").ToList();
}

x.LastName.Decrypt()是否会从 sql 中获取所有记录并对代码端的每个字段执行解密?

如果我使用怎么办

public User GetUserByEmail(string email)
{
      return _db.Users.Where(x => x.LastName == "Patel".Encrypt()).ToList();
}

哪一个更好

4

2 回答 2

1

很有可能您的第一个查询根本不起作用,除非您通过调用AsEnumerable()ToList或强制将数据放入内存ToArray,因为 EF 提供程序不知道如何将您的Encrypt函数转换为 SQL。

另一方面,第二个查询应该可以正常工作,因为它是字符串到字符串的比较。

此外,当“加密”字符串不能用 a 反转时,第二种查询方式可以让您实现一种可能更安全的方案Decrypt,例如,当您存储消息摘要时。

于 2013-09-24T13:07:27.993 回答
0

调用.Decrypt()Where函数将解密LastName每一行和每一行。最好使用显示的 .Encrypt() 方法,该方法将调用一次“Encrypt”,并将每个 LastName 与“Pate1”的加密字符串进行比较。

于 2013-09-24T13:06:25.777 回答