我的方法总是返回false,为什么?

时间:2013-01-07 10:51:47

标签: c# linq entity-framework

public bool IsUser(string username)
    {
        bool user = false;
        using (var client = new datingEntities())
        {
            var result = from x in client.Person
                         select x;

            foreach (var item in result)
            {
                if (item.Username == username)
                {
                    user = true;
                }
            }
        }
        return user;
    }

我使用此方法从我拥有的SQL数据库中获取数据。这与数据库连接没有问题,即使数据库中存在参数username,它也总是返回false(双重检查数据库中的数据)。我之前尝试过这种方法然后它有效,但事实并非如此。我正在对我的数据库使用实体框架

4 个答案:

答案 0 :(得分:5)

这样做:

public bool IsUser(string username)
{
    using (var entities = new datingEntities())
    {
        return entities.Person.Any(p => p.Username == username);
    }
}

现在您请求所有用户实体并循环浏览它们以查看用户是否与查询的用户名匹配。您应该让Entity Framework或LINQ编写查询,如上所示。

至于你的功能不起作用的原因:设置一个断点,找出是否找到任何用户。我们无法为您调试。

答案 1 :(得分:1)

使用“ToUpper()”

if (item.Username.ToString().ToUpper() == username.ToUpper())
{
 user = true;
}

<强> [EDITED]

或使用“等于”

item.Equals(username, StringComparison.OrdinalIgnoreCase)

答案 2 :(得分:0)

我的答案不如评论中提到的其他人好,但我把它留在这里供参考
<击> 我不确定为什么它会返回false,但你想要达到的目的通常是通过以下方式完成:

public bool IsUser(string username)
{
    using (var client = new datingEntities())
    {
        User user = client.Persons.SingleOrDefault(u => u.Username == username);
        return user != null;
    }
}

这种方式比你的方式更有效率,因为你首先从数据库中提取所有用户记录然后迭代它们以找到用户名等于提供的字符串的一个用户。我的方法是尝试获取一个记录,其中Username等于提供的字符串,如果不存在这样的记录,则返回false,否则为true。

答案 3 :(得分:0)

我会将item.UserName和username值转换为小写并以这种方式比较它们。这看起来更可靠。此外,您的linq查询可以更改为避免循环,如下所示:

var result = from x in client.Person
             where x.UserName.ToLower() == userName.ToLower()
                         select x;