通过电子邮件地址查找ID的最佳方法

时间:2019-02-13 01:52:46

标签: asp.net function methods

我有一个自定义用户表,该表存储了userId及其电子邮件地址。我编写了一个函数,该函数接受两个参数,即id和email。如果电子邮件存在,请在表格中检索ID。此时,我无法找到ID。下面是到目前为止的代码。感谢社区的任何帮助。

public IEnumerable<Person> UserEmailId(int id, string email)
{

   return UserEmailId(id, email);
}

2 个答案:

答案 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对象),但是鉴于您所陈述的要求,它可以完成您想要的工作。