WCF服务操作始终返回false

时间:2013-03-01 21:22:39

标签: c# wcf linq wcf-data-services

我遇到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;
    }

2 个答案:

答案 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);