0

文字列(この場合は私のログイン)をハッシュし、それをデータベースで見つけようとするコードをlinqで書いています。

私は試した :

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

HashCode が原因でエラーが発生しました。foreach ですべてのリストを読み取るわけではありません。1行のコードでそれが可能かどうか疑問に思っています。よろしく。

編集:そうする方法を見つけましたが、思ったほど軽くはありません。

  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

ユーザーが多すぎない場合は、このように 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 に答える