1

私には方法があり、ユーザー名、パスワード、電子メールをこの方法に対して送信しています。同じレコードがある場合は、Linq でクエリを実行しています。ただし、ユーザーが null 値を送信すると、linq エンティティの null 値とは異なり、false が返されます。

コードはここにあります:

public int GetTheUserID(string login, string pass, bool isAD)
{
        try
        {
            if (pass == null) {  } 
            if (query.Any()) query = query.Where(x => (x.LoginName == login) && (x.Password_ == pass) && (isAD == x.ADUser) && (x.Deleted == false));
            else query = Entity.SecurityUsers.Where(x => (x.LoginName == login) && (x.Password_ == pass) && (isAD == x.ADUser) && (x.Deleted == false));
            if (query.Any())
            {
                singleresult.TransactionResult = query.FirstOrDefault();
                return singleresult.TransactionResult.ID;
            }
            else return 0;
        }
        catch (Exception ex)
        {
            return 0;
        }
}

たとえば、パスワードが null になり、このユーザー資格情報とパスワードが null の同じレコードがある場合、「 x.Password_ == pass 」は true を返しません。

ここで pass は値を持つことも、null になることもあります。「x.Password is null」や「x.password == null」と書くことはできませんが、最後のものは問題ありません。

4

1 に答える 1

0

この方法でそれを行うことができます:

public int GetTheUserID(string login, string pass, bool isAD)
    {
        try
        {
            if (query.Any()) query = query.Where(x => (x.LoginName == login) 
                  && ((pass == null) ? x.Password_ == null : x.Password_ == pass) 
                  && (isAD == x.ADUser) && (x.Deleted == false));
            else query = Entity.SecurityUsers.Where(x => (x.LoginName == login) 
                  && ((pass == null) ? x.Password_ == null : x.Password_ == pass)
                  && (isAD == x.ADUser) && (x.Deleted == false));
            if (query.Any())
            {
                singleresult.TransactionResult = query.FirstOrDefault();
                return singleresult.TransactionResult.ID;
            }
            else return 0;
        }
        catch (Exception ex)
        {
            return 0;
        }
    }
于 2013-05-06T15:23:36.027 に答える