-1
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

4 回答 4

5

这将做:

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

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

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

于 2013-01-07T10:56:21.127 回答
1

使用“ToUpper()”

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

[编辑]

或使用“相等”

item.Equals(username, StringComparison.OrdinalIgnoreCase)
于 2013-01-07T10:57:07.023 回答
0

我的回答不如评论中提到的其他人好,但我将其留在这里以供参考。

我不知道为什么它返回 false 但你想要实现的通常是通过以下方式完成的:

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

这种方式比您的方式高效得多,因为您首先从数据库中提取所有用户记录,然后遍历它们以找到用户名等于提供的字符串的一个用户。我的方法尝试获取用户名等于提供的字符串的一条记录,如果不存在这样的记录,我返回 false,否则返回 true。

于 2013-01-07T10:55:25.820 回答
0

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

var result = from x in client.Person
             where x.UserName.ToLower() == userName.ToLower()
                         select x;
于 2013-01-07T10:56:05.700 回答