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数据库中获取数据。数据库连接没有问题,只是它总是返回false,即使参数username存在于数据库中(仔细检查数据库中的数据)。我以前试过这种方法,然后它工作,但它没有。我使用实体框架对我的数据库
这样做:
public bool IsUser(string username)
{
using (var entities = new datingEntities())
{
return entities.Person.Any(p => p.Username == username);
}
}
现在请求所有用户实体并遍历它们以查看用户是否与查询的用户名匹配。你应该让实体框架或LINQ编写查询,就像上面演示的那样。
至于你的函数不工作的原因:设置一个断点,找出是否有任何用户被找到。
使用" topper () "
if (item.Username.ToString().ToUpper() == username.ToUpper())
{
user = true;
}
[编辑]
使用"Equal"
item.Equals(username, StringComparison.OrdinalIgnoreCase)
我将转换这两个条目。将UserName和UserName值转换为小写,并以这种方式进行比较。这个看起来更可靠。此外,您的linq查询可以更改以避免循环,如下所示:
var result = from x in client.Person
where x.UserName.ToLower() == userName.ToLower()
select x;
我的答案不如评论中提到的其他人好,但我把它留在这里供参考。
<罢工>我不确定为什么它返回false,但你想要实现的通常是通过以下方式完成的:罢工>
public bool IsUser(string username)
{
using (var client = new datingEntities())
{
User user = client.Persons.SingleOrDefault(u => u.Username == username);
return user != null;
}
}
这种方法比您的方法效率高得多,因为您首先从数据库中提取所有User记录,然后遍历它们以找到Username等于所提供字符串的一个用户。我的方式试图获得一个记录与用户名等于所提供的字符串,如果没有这样的记录存在,我返回false,否则为真。