linq - 哈希登录然后用 linq 搜索它

标签 linq algorithm entity-framework

我正在用 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;
                }
            }

最佳答案

如果你的用户不是太多,你可以像这样在一条线上完成。

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

重要的一点是 ToList(),它计算 EF 部分并使其余的 linq-to-objects。这意味着比较将在客户端完成,所有用户将从服务器检索。它等同于您的编辑。

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

关于linq - 哈希登录然后用 linq 搜索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429522/

相关文章:

从沿该曲线的点导出贝塞尔曲线的控制点的算法?

c - 如何将 64 位哈希值缩短为 48 位值?

asp.net-mvc - EF4.3.1中的MaxLength属性

multithreading - 使用EF4和锁定的表中的唯一值

c# - 根据最晚日期从 IGrouping 中获取项目

C# 列表中的最小差异

algorithm - 分析我的程序的时间复杂度

c# - 如何在不执行 Queryable 的情况下以通用方式替换 Queryable<T> 中的列

c# - 如何使用 LINQ 对序列中的相同值进行分组?

C# LINQ - 与 float 列表比较