代码之家  ›  专栏  ›  技术社区  ›  ispiro

如果First()不存在,如何获取它而不引发异常?[当FirstOrDefault不起作用时]

  •  1
  • ispiro  · 技术社区  · 6 年前

    我想买一个 First 如果找不到结果,则在不引发异常的情况下使用Linq2Sql。

    FirstOrDefault OrDefault .

    有没有办法得到一份工作 具有

    我知道我可以查 Any() 首先,但这意味着访问数据库两次。如果可能的话,我想避免这种情况。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Douglas    6 年前

    如果我理解正确的话,您的问题发生是因为您正在投影一个可为null的列,并且您无法区分 FirstOrDefault() 返回null是因为字段为null,而不是因为找不到记录:

    var lastName = persons
        .Where(p => p.FirstName == 'xxx')
        .Select(p => p.LastName)
        .FirstOrDefault();
    

    一个简单的修复方法是将列投影到匿名类型:

    var record = persons
        .Where(p => p.FirstName == 'xxx')
        .Select(p => new { p.LastName })
        .FirstOrDefault();
    

    record 本身为null,则表示未找到任何记录。然而,如果 记录 不是空的,但是 record.LastName null .