1

WCFサービスの操作に問題があります。データベースからpasswod値を取得し、渡す必要があるときにfalse値を返します。私は何が間違っているのですか?

public bool LogIn(string userId, string passwd)
    {
        bool prompt;
        ProgDBEntities context = new ProgDBEntities();

        IQueryable<string> haslo = (from p in context.UserEntity where p.UserID == userId select p.Passwd);


        bool passOk = String.Equals(haslo, passwd);


        if (passOk == true )
        {
            prompt = true;                
        }
        else
        {
            prompt = false;               
        }
        return prompt;
    }
4

2 に答える 2

3

取得した単一のエントリを、(IQueryable / IEnumerableではなく)渡されたパスワードと比較したいようです。そのためには、FirstOrDefaultメソッドを使用してみてください。

public bool LogIn(string userId, string passwd)
    {
        bool prompt;
        ProgDBEntities context = new ProgDBEntities();

        var haslo = (from p in context.UserEntity where p.UserID == userId select p.Passwd).FirstOrDefault();

        // No need to use String.Equals explicitly
        bool passOk = haslo == passwd;


        if (passOk == true )
        {
            prompt = true;                
        }
        else
        {
            prompt = false;               
        }
        return prompt;
    }
于 2013-03-01T21:32:37.237 に答える
2

hasloは、個々の文字列ではなく、文字列のコレクションを表します。つまり、String.Equals(haslo、passwd)は、文字列のコレクションを個々の文字列と比較しているため、常にfalseを返します。これらは2つの異なるタイプのオブジェクトです。

次のようにコードを変更してみてください。FirstOrDefault()は、コレクションの最初の文字列を返します。空の場合はNULLを返します。

bool passOk = String.Equals(haslo.FirstOrDefault(), passwd);
于 2013-03-01T21:38:56.500 に答える