0

我正在用 linq 编写一段代码,它必须散列一个字符串(在这种情况下是我的登录名),然后尝试在我的数据库中找到它。

我试过 :

var userFind = context.Users.FirstOrDefault(user =>HashHelper.HashCode(user.Login).Equals(u.Login));

由于 HashCode,我得到了一个错误。我不会用 foreach 阅读我的所有列表。我想知道是否可以用一行代码来做到这一点。问候。

编辑:我找到了一种方法,但它没有我预期的那么轻。

  User userFind = null;
            foreach (var user in context.Users)
            {
                string hashedLogin = HashHelper.HashCode(user.Login);
                if(hashedLogin.Equals(u.Login))
                {
                    userFind = user;
                }
            }
4

2 回答 2

1

如果你没有太多用户,你可以像这样在一行上做。

var userFind = context.Users.ToList().FirstOrDefault(
    user => HashHelper.HashCode(user.Login).Equals(u.Login))

重要的一点是ToList()它评估 EF 部分并制作其余的 linq-to-objects。这意味着将在客户端进行比较,并且将从服务器检索所有用户。它相当于您的编辑。

如果性能是一个问题,您也应该将哈希码存储在数据库中。

于 2012-07-11T10:16:18.750 回答
0

如果数据库中的数据已经被散列并且 u.Login 是当前用户登录的值,那么你可能会这样做:

var hashedLogin = HashHelper.HashCode(u.Login); // hash the value in the app so it can be compared to already hashed values in database.
var userFind = context.Users.Where(user => user.Login == hashedLogin).FirstOrDefault();

我真的不太了解你想要达到的目标,所以如果这真的有帮助,我会感到惊喜。祝你好运!

于 2012-07-11T09:31:59.410 回答