我正在用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;
}
}
答案 0 :(得分:1)
如果您没有太多用户,可以在这样的一行上进行。
var userFind = context.Users.ToList().FirstOrDefault(
user => HashHelper.HashCode(user.Login).Equals(u.Login))
重要的位是ToList()
,它评估EF部分并使其余的linq-to-objects。这意味着将在客户端上进行比较,并且将从服务器检索所有用户。它等同于您的编辑。
如果性能有问题,您也应该将哈希码存储在数据库中。
答案 1 :(得分: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();
我对你想要达到的目标并不是很了解,所以如果这真的有帮助,我会感到惊喜。祝你好运!