Linq 如何比较EF中区分大小写的字符串?

Linq 如何比较EF中区分大小写的字符串?,linq,entity-framework-4,asp.net-membership,Linq,Entity Framework 4,Asp.net Membership,使用EF的成员资格提供者ValidateUser非常简单 public override bool ValidateUser(string username, string password) { // Validate User Credentials var r = db.ST_Users.FirstOrDefault( x => x.Username.Equals(username) &&

使用EF的成员资格提供者
ValidateUser
非常简单

public override bool ValidateUser(string username, string password)
{
    // Validate User Credentials
    var r = db.ST_Users.FirstOrDefault(
                           x => x.Username.Equals(username) && 
                                x.Password.Equals(password));
    return r != null ? true : false;
}
但无论我使用
balexandre
还是
balexandre
,它都会返回
true
(查找并检索孔对象)

如何启用EF在区分大小写模式下进行比较?


我知道如何不区分大小写进行比较(使用
StringComparison.CurrentCultureIgnoreCase
重载,但我只想要相反的结果)

您不应该查询密码。您应该检索
User
对象并在本地进行密码比较,因为默认情况下,SQL server将为您进行不区分大小写的比较(除非您更改数据库设置,这一点您不应掉以轻心)


此外,您似乎正在数据库中存储普通密码。根据应用程序的类型,这可能不是一个好主意。试着用盐把它们煎散。在Stackoverflow上可以找到很多关于这方面的好信息。例如,看看和。

我也面临着同样的问题。我试过:

1. from p in entity.SecurityUsers where p.userName.Equals(userName) && p.password.Equals(password) select p
2. from p in entity.SecurityUsers where p.userName == userName && p.password == password select p
但这两个都不起作用。然后我选择了
USER
only

var user = (from p in entity.SecurityUsers where p.userName == userName select p).first();
然后比较其密码:

return p != null && p.Password == password;

+1表示答案和建议。向索尼、ECI和所有其他最近发布新闻的公司学习——不要存储纯文本密码!我使用
BCrypt
存储密码,这个问题只有一个简单的例子。如果以我的声誉,我不知道/存储敏感数据的正确方式,那就太奇怪了@balexandre:我不熟悉
BCrypt
,但如果您在数据库中以哈希形式存储密码,则不会出现任何不区分字符串的字符串比较问题,因此在我看来,您似乎没有以哈希形式存储密码。也许您正在加密密码,这比散列更不安全。除此之外,你为什么希望能够解密你的用户密码?这个问题只是应用程序其他部分的一个简单例子,我不能(因为它属于该公司)使用代码——奇怪的内部规则
BCrypt
非常易于使用且非常安全>>。同样,我的问题只有一个示例代码,而不是生产代码。但是我从你的回答中得到了一些东西:不要与LINQ进行比较,提取对象并在查询之外进行比较。谢谢你。@balexandre:别开枪打信使;-)我很高兴我的回答对你有帮助。干杯
return p != null && p.Password == password;