我有一个功能来检索用户详细信息
我加密了几个字段。我想知道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();
}
哪一个更好
答案 0 :(得分:1)
很有可能你的第一个查询根本不起作用,除非你强制通过调用AsEnumerable()
,ToList
或ToArray
将数据带入内存,因为EF提供程序不知道如何将Encrypt
函数转换为SQL。
另一方面,第二个查询应该可以正常工作,因为它是一个字符串到字符串的比较。
此外,第二种查询方式可让您在使用Decrypt
无法撤消“加密”字符串时实施可能更安全的方案。当您存储消息摘要时。
答案 1 :(得分:0)
在.Decrypt()
函数中调用Where
将解密每个&{0}上的LastName
。每一行。你最好使用你显示的.Encrypt()方法,它会调用'Encrypt`一次,并将每个LastName与“Pate1”的加密字符串进行比较。