[英]How to query a Dbset to find one specific object via LINQ?
我试图通过具有每个表的数据库集的应用程序数据库上下文 class 访问我的数据库,我的目标是从登录时插入到输入中的特定用户从数据库中检索一个字段,但是我不确定我怎么能通过LINQ查询数据库,获取用户的具体字段
//Search if username exists on database(working)
var user = _context.User.Where(a => a.Username == Credential.Username).FirstOrDefault();
//Get the salt from that user(not working)
var salt = _context.User.Where(a => a.Username == Credential.Username).Select(a => a.Salt);
//Get the hash from that user(also not working)
var hash = _context.User.Where(a => a.Username == Credential.Username).FirstOrDefault();
if (user!= null && Credential.Username == user.Username && Credential.Password =="password")
{
我的目标是首先通过将输入的用户名与数据库中的现有用户进行比较来检查用户是否存在,然后获取他的盐,对他的输入进行加盐,然后 hash 将其与我数据库中现有的哈希值进行比较,但我不确定如何通过 LINQ 查询 DBset 有没有推荐的方法来做这些查询?
好的,我想我现在明白了,我从数据库中获取了整个用户,而不仅仅是用户名,所以我可以使用这个整个用户 object 来获取我需要的其他字段,方法是获取一个用户名 = 登录输入保证用户是正确的我尝试将登录限制为数据库上的 hash 并更改 if(Credential.password= salt) 并且登录有效,所以我假设它获得了正确的值我测试了其他值并且它不起作用所以它只是我不明白我从那个查询中得到了什么。
在以下情况下,您正在编写查询但不执行它。 如果你检查 salt 数据类型,你会发现它是 IQueryable 类型的。
var salt = _context.User.Where(a => a.Username == Credential.Username).Select(a => a.Salt);
要实际查询数据库,请按以下方式调用FirstOrDefault()
:
var salt = _context.User.Where(a => a.Username == Credential.Username).Select(a => a.Salt).FirstOrDefault();
在以下情况下,语句的结果是User
类型,因为您没有选择 hash .Select(a => a.Hash)
,如下所示:
var hash = _context.User.Where(a => a.Username == Credential.Username).Select(a => a.Hash).FirstOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.