C# 检查用户名是否存在,区分大小写 public bool CheckUsername(字符串用户名) { bool exists=false; 变量查询= 从t到db.coach 其中String.Equals(t.user\u名称、用户名) 选择t; List coach=query.ToList(); 如果(coach.Count!=0) { 存在=真; } 其他的 { 存在=假; } 回报存在; }
这是我的职责。例如,如果用户名C# 检查用户名是否存在,区分大小写 public bool CheckUsername(字符串用户名) { bool exists=false; 变量查询= 从t到db.coach 其中String.Equals(t.user\u名称、用户名) 选择t; List coach=query.ToList(); 如果(coach.Count!=0) { 存在=真; } 其他的 { 存在=假; } 回报存在; },c#,string,entity-framework,equals,C#,String,Entity Framework,Equals,这是我的职责。例如,如果用户名james存在,我希望用户仍然能够使用用户名james,james。。。就我所知,String.equals()区分大小写,但我的函数不起作用。你知道为什么这样不行吗?我尝试使用compare,但它不起作用,因为它返回一个int。我的猜测是,虽然String.Equals通常区分大小写,但db在其查询中设置为不区分大小写。您可能需要修改数据库以将字段设置为区分大小写。我的猜测是,虽然String.Equals通常区分大小写,但db在其查询中设置为不区分大小写。您可能
james
存在,我希望用户仍然能够使用用户名james
,james
。。。就我所知,String.equals()
区分大小写,但我的函数不起作用。你知道为什么这样不行吗?我尝试使用compare,但它不起作用,因为它返回一个int。我的猜测是,虽然String.Equals通常区分大小写,但db在其查询中设置为不区分大小写。您可能需要修改数据库以将字段设置为区分大小写。我的猜测是,虽然String.Equals通常区分大小写,但db在其查询中设置为不区分大小写。您可能需要修改数据库以将字段设置为区分大小写。您有拼写问题。更改以下内容:
public bool CheckUsername(string username)
{
bool exists=false;
var query =
from t in db.Coaches
where String.Equals(t.user_name,username)
select t;
List<Coach> coaches = query.ToList();
if (coaches.Count!=0)
{
exists = true;
}
else
{
exists = false;
}
return exists;
}
到
你有拼写问题。更改以下内容:
public bool CheckUsername(string username)
{
bool exists=false;
var query =
from t in db.Coaches
where String.Equals(t.user_name,username)
select t;
List<Coach> coaches = query.ToList();
if (coaches.Count!=0)
{
exists = true;
}
else
{
exists = false;
}
return exists;
}
到
String.equals()
区分大小写,但EF会将其转换为SQL,SQL可能不区分大小写,具体取决于该列的排序规则(如果该列没有指定排序规则,则数据库也可能不区分大小写)
通过将该列的排序规则设置为区分大小写,可以在服务器端解决此问题
exists = true;
或者在客户端,通过回调与不区分大小写的搜索匹配的所有记录,然后在Linq中过滤到对象:
ALTER TABLE Coaches
ALTER COLUMN user_name VARCHAR(20) // or whatever the size of your username column is
COLLATE Latin1_General_CS_AS
只要您没有成千上万的用户在不同的大小写中使用相同的用户名,那么在linq to对象中进行过滤不会产生太大的影响
请注意,更改列的排序规则将影响对username
进行筛选或排序的任何查询,因此在进行更改之前,请在单独的环境中进行大量测试。String.equals()
区分大小写,但EF会将其转换为SQL,这可能不区分大小写,具体取决于该列的排序规则(如果该列没有指定排序规则,则取决于您的数据库)
通过将该列的排序规则设置为区分大小写,可以在服务器端解决此问题
exists = true;
或者在客户端,通过回调与不区分大小写的搜索匹配的所有记录,然后在Linq中过滤到对象:
ALTER TABLE Coaches
ALTER COLUMN user_name VARCHAR(20) // or whatever the size of your username column is
COLLATE Latin1_General_CS_AS
只要您没有成千上万的用户在不同的大小写中使用相同的用户名,那么在linq to对象中进行过滤不会产生太大的影响
请注意,更改列的排序规则将影响对
用户名进行筛选或排序的任何查询,因此在进行更改之前,请在单独的环境中进行大量测试。“我的函数不起作用”不会告诉我们任何信息。另外,代码的后半部分相当于returnquery.Any()代码>。实际上,您的整个方法可以转换为returndb.coach.Any(t=>t.user\u name==username)代码>我正在使用实体框架。db是我的上下文。@JonSkeet实际上它是有效的,但它不会返回我想要的东西。比较无效。我要那个“詹姆斯”“James”如果它不做你想要的,那么它就不工作了-但是你没有清楚地描述发生了什么。假设“db”是EF,下面的解释是如何做的:“我的函数不工作”没有告诉我们任何事情。另外,代码的后半部分相当于returnquery.Any()代码>。实际上,您的整个方法可以转换为returndb.coach.Any(t=>t.user\u name==username)代码>我正在使用实体框架。db是我的上下文。@JonSkeet实际上它是有效的,但它不会返回我想要的东西。比较无效。我要那个“詹姆斯”“James”如果它不能满足您的要求,那么它就不起作用-但您还没有清楚地描述会发生什么。假设“db”是EF,下面是如何实现的说明:不幸的是,我的真实代码中没有出现这个错误,感谢您澄清这一点。我想知道intellisense为什么没有为您选择它。:)不幸的是,这个错误并没有出现在我的真实代码中,感谢您澄清了这一点。我想知道为什么intellisense没有为您收集这些信息。:)