我有一个自定义用户表,该表存储了userId及其电子邮件地址。我编写了一个函数,该函数接受两个参数,即id和email。如果电子邮件存在,请在表格中检索ID。此时,我无法找到ID。下面是到目前为止的代码。感谢社区的任何帮助。
public IEnumerable<Person> UserEmailId(int id, string email)
{
return UserEmailId(id, email);
}
答案 0 :(得分:3)
我将继续进行下去,并假设您感到非常困惑,或者您要查找电子邮件/标识匹配的所有用户,或者您想要找到电子邮件/标识匹配的单个用户。
返回所有电子邮件或ID匹配的人:
public IEnumerable<Person> UserEmailId(int id, string email)
{
return _context.Person.Where(x => x.Email == email || x.Id == id);
}
返回电子邮件或ID匹配的第一个人
public Person UserEmailId(int id, string email)
{
return _context.Person.FirstOrDefault(x => x.Email == email || x.Id == id);
}
返回其ID(或如果没有找到)与之匹配的电子邮件的第一人:
public Person UserEmailId(int id, string email)
{
return _context.Person.FirstOrDefault(x => x.Email == email) ?? _context.Person.FirstOrDefault(x => x.Id == id);
}
如果这些都不是您的用例,请编辑您的问题以阐明您要做什么,我将再看一遍。
根据您的评论进行编辑:
John,您好,所以我的想法是我要查找具有唯一电子邮件地址的单个用户。找到他们的电子邮件地址后,我想找到ID。
.Where(...)
是一个过滤器。即使从该枚举中只有一个项目,您仍然可以从中获得一个枚举。
如果要通过电子邮件地址查找用户并获取其ID,则需要执行以下操作:
public int? GetUserIdByEmail(string email)
{
return _context.Person.FirstOrDefault(x => x.Email == email)?.Id;
}
打破现状:
FirstOrDefault
将通过电子邮件进行过滤并返回其找到的第一人称实体(如果找不到,则为null)。?.
返回了null
,FirstOrDefault
将使评估短路,如果短路,则将(int?)null
断开。?.Id
获取Person实体的Id
属性值并返回它。基本上,您只想找到Person
实体,然后可以访问它以获取其他信息。
答案 1 :(得分:0)
好的,所以根据您的陈述,您要在注释中做些事情:
public int UserIdFromEmail(string email)
{
var person = _context.Person.FirstOrDefault(x => x.Email == email);
if (person != null)
{
return person.Id;
}
return -1;
}
请注意,我假设id字段为int,如果未找到用户,则返回-1。在实际上下文中,这可能不是最好的选择(为什么不仅仅返回Person对象),但是鉴于您所陈述的要求,它可以完成您想要的工作。