我遇到WCF服务操作问题。我从数据库中获取密码值,何时应该传递它返回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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:2)
haslo表示字符串的集合,而不是单个字符串。这意味着String.Equals(haslo,passwd)将始终返回false,因为您将字符串的集合与单个字符串进行比较 - 它们是两种不同类型的对象。
您可以尝试按如下方式修改代码。 FirstOrDefault()将返回集合中的第一个字符串,如果它为空则返回NULL。
bool passOk = String.Equals(haslo.FirstOrDefault(), passwd);