这个linq查询将如何执行

时间:2013-09-24 13:02:47

标签: linq entity-framework-4

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

我加密了几个字段。我想知道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();
}

哪一个更好

2 个答案:

答案 0 :(得分:1)

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

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

此外,第二种查询方式可让您在使用Decrypt无法撤消“加密”字符串时实施可能更安全的方案。当您存储消息摘要时。

答案 1 :(得分:0)

.Decrypt()函数中调用Where将解密每个&{0}上的LastName。每一行。你最好使用你显示的.Encrypt()方法,它会调用'Encrypt`一次,并将每个LastName与“Pate1”的加密字符串进行比较。