如何使用Linq比较Sql中的两列

时间:2017-01-25 20:57:32

标签: c# linq

Sql表:

ID      User        Pass
1       John        09o0s
2       Jim         bd09d

C#:

string u = the user name provided by someone;
string p = the password provided by someone;

List<DataRow> list = dt.AsEnumerable().ToList();

bool trueor =  list.Any(user => user.Equals(strU));

如何使用Linq查看提供的用户名是否有条目,如果有,则提供的密码是否与用户名匹配。

1 个答案:

答案 0 :(得分:3)

您可以使用&&运算符来比较用户名和密码:

bool isValidUser = list.Any(x => x.User == u && x.Pass == p);

顺便提一下,当前的设计看起来就像是在数据库中以明文形式存储用户密码。这是你不应该做的事情,而是你应该只存储哈希和盐。所以正确的算法就是:

string u = the user name provided by someone;
string p = the password provided by someone;

// I have no idea what this dt variable is, but I assume for this example
// that it is an entity framework context that returns a users table with the
// following columns: ID, User, PasswordSalt and PasswordHash
List<DataRow> list = dt.AsEnumerable().ToList();

bool isValidUser = false;
var user = list.SingleOrDefault(x => x.User == u); // the username must be unique
if (user != null)
{
    string actualHash = CalculateHash(p, user.PasswordSalt);
    isValidUser = actualHash == u.PasswordHash;
}

return isValidUser;

因此,您可以在此示例中看到正确的实现是在您的数据库中存储Username,Salt和Password哈希。然后将计算出的哈希值与db中的值进行比较,以验证用户是否输入了正确的凭据。