C# 如何使用FirstAsync处理实体框架核心中的null?

C# 如何使用FirstAsync处理实体框架核心中的null?,c#,entity-framework-core,C#,Entity Framework Core,当找不到记录时,这会导致空引用异常。如果是这种情况,我如何使它返回null?您可以使用。您可以使用 FirstOrDefaultAsync将始终返回默认值,而不是引发异常。因此,如果没有记录,您可以检查返回的内容。在本例中,我们检查null,如果是,我们将尝试返回一个空列表 FirstOrDefaultAsync将始终返回默认值,而不是引发异常。因此,如果没有记录,您可以检查返回的内容。在本例中,我们检查null,如果是,我们将尝试返回一个空列表 您可以使用FirstOrDefaultAsync

当找不到记录时,这会导致空引用异常。如果是这种情况,我如何使它返回null?

您可以使用。

您可以使用

FirstOrDefaultAsync将始终返回默认值,而不是引发异常。因此,如果没有记录,您可以检查返回的内容。在本例中,我们检查null,如果是,我们将尝试返回一个空列表


FirstOrDefaultAsync将始终返回默认值,而不是引发异常。因此,如果没有记录,您可以检查返回的内容。在本例中,我们检查null,如果是,我们将尝试返回一个空列表

您可以使用FirstOrDefaultAsync,如果它不存在,则返回null,但不会发生异常

public async Task<ParagemRegisto> GetParagemRegistoOnGoingAsync(int registoId)
{
    var result = await _context.ParagensRegistos
        .Where(pr => pr.RegistoId == registoId && pr.HoraFim == null)
        .FirstOrDefaultAsync();

    return result ?? new List<ParagemRegisto>();
}

您可以使用FirstOrDefaultAsync,如果它不存在,则返回null,但不会发生异常

public async Task<ParagemRegisto> GetParagemRegistoOnGoingAsync(int registoId)
{
    var result = await _context.ParagensRegistos
        .Where(pr => pr.RegistoId == registoId && pr.HoraFim == null)
        .FirstOrDefaultAsync();

    return result ?? new List<ParagemRegisto>();
}

我认为您需要FirstOrDefaultAsync,但这不应该为无记录提供null异常,它应该提供InvalidOperationException。可能重复的@juharr FirstOrDefaultAsync不会引发InvalidOperationException。它将返回默认值。我知道,我使用linq有一段时间了,但仍然不太了解它。我觉得基本上是一样的。谢谢你的澄清up@Jackal不客气。使用默认值时不会引发异常。SingleOrDefaultAsync的情况也是如此。我认为您需要FirstOrDefaultAsync,但这不应该为无记录提供null异常,它应该提供InvalidOperationException。可能重复的@juharr FirstOrDefaultAsync不会引发InvalidOperationException。它将返回默认值。我知道,我使用linq有一段时间了,但仍然不太了解它。我觉得基本上是一样的。谢谢你的澄清up@Jackal不客气。使用默认值时不会引发异常。SingleOrDefaults的情况也是如此,你能解释一下为什么是这样吗??返回新列表?@Jackal如果在左侧??运算符求值为null,右侧求值。阅读有关null合并运算符的详细信息。@Jackal通常最好返回空集合,而不是null??将检查结果是否为空。如果是这种情况,它将返回一个空列表,这样如果方法的使用者没有显式检查null返回,就不会遇到问题values@Shahzad您的答案在代码方面当然是正确的,但从OP的评论中可以看出,他是LINQ的新手,很可能也是C。我相信,解释一下您的代码与OP的原始代码不同之处也会有所帮助。这也将提高你的答案的质量@TobiasTengler感谢您的评论。请记住这一点,以备将来的答案!你能给我解释一下为什么是??返回新列表?@Jackal如果在左侧??运算符求值为null,右侧求值。阅读有关null合并运算符的详细信息。@Jackal通常最好返回空集合,而不是null??将检查结果是否为空。如果是这种情况,它将返回一个空列表,这样如果方法的使用者没有显式检查null返回,就不会遇到问题values@Shahzad您的答案在代码方面当然是正确的,但从OP的评论中可以看出,他是LINQ的新手,很可能也是C。我相信,解释一下您的代码与OP的原始代码不同之处也会有所帮助。这也将提高你的答案的质量@TobiasTengler感谢您的评论。请记住这一点,以备将来的答案!
  public async Task<ParagemRegisto> GetParagemRegistoOnGoingAsync(int registoId)
  {
     return await = _context.ParagensRegistos.FirstOrDefaultAsync(pr => pr.RegistoId == registoId && pr.HoraFim == null);
  }