如果 First() 不存在,如何在不引发异常的情况下获取它?[当第一个或默认不起作用时]



我想使用Linq2Sql获得First,而不引发异常,以防找不到结果。

我知道FirstOrDefault,但如果我收到一个默认值,我不知道它是否在数据库中,或者它是否作为OrDefault返回。

有没有一种方法可以在不引发异常的情况下获得First,但在知道接收到的值是否来自数据库的情况下

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

如果我理解正确,您的问题发生是因为您投影了一个可为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不为空,但record.LastName为空,则找到字段值为null的记录。

相关内容

最新更新