WCF服务操作总是返回false
问题描述:
我有一个WCF服务操作的问题。我从数据库获得passwod值,当它通过时它返回false值。我究竟做错了什么?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;
}
答
看起来好像你想比较一个检索的条目与传入的密码(而不是任何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;
}
答
haslo代表字符串收集,而不是一个单独的字符串。这意味着String.Equals(haslo,passwd文件)将始终返回false,因为你比较字符串的集合到一个单独的字符串 - 它们是两种不同类型的对象。
你可以尝试修改代码如下。 FirstOrDefault()将返回集合中的第一个字符串,如果它为空,则返回NULL。
bool passOk = String.Equals(haslo.FirstOrDefault(), passwd);
它的工作原理:d非常感谢你:) – bohunn 2013-03-01 21:36:29