2017-01-25 2 views
-4

Sql Таблица:Как использовать 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, чтобы увидеть, если имя пользователя при условии, есть запись, и если он делает , это предоставленный пароль соответствует имени пользователя.

+2

Для этого требуется ровно две основные функции LINQ, описанные в учебниках. что ты уже испробовал? – CDove

+1

Попробуйте это для удаленного вопроса, если он все еще не работает: https://jsfiddle.net/dotspencer/3xnmn7np/8/ –

+0

@ spencer.sm Спасибо. У меня почти что-то похожее, используя функцию «map», но ваша проще и короче ... – Si8

ответ

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; 

Так как вы можете видеть в этом примере надлежащее осуществление является хранение имя пользователя, соль и хэш пароля в базе данных. Затем сравните рассчитанный хеш с значением из db, чтобы проверить, введен ли пользователь правильные учетные данные.

+0

'.User' как мне это получить? Благодарю. Оххх это только тест, и пароль, конечно, не будет простым текстом. – Si8

+0

Не знаю, ваш ORM, вероятно, обеспечит его, если вы его правильно настроили. В основном, если вы используете Entity Framework, вы получите те же свойства объекта User, что и столбцы в базе данных. В вашем вопросе вы, похоже, предоставили некоторую переменную 'dt', которая, я думаю, вы, вероятно, единственный человек на этой планете, который знает, что она представляет. –

+0

Я закончил использование словаря. Заполнил словарь и сравнил его так ... намного проще. Спасибо. – Si8