LINQ的FirstOrDefault方法中序列不包含元素

3
我在使用LINQ的FirstOrDefault时遇到了“Sequence contains no elements”的错误。
int? locationId = _ctx.m_locations.FirstOrDefault(
                       l => l.name.ToLower() == countyOrTown.ToLower()
                  ).location_key;

我认为FirstOrDefault的整个意义在于,如果数据库中没有条目,它不会引发异常,而只是返回null?

5
即便如此,当返回值为null时,你如何期望成功访问 location_key - Grant Thomas
1
如果没有元素,它将返回NULL - 并且您无法在NULL值上执行.location_key - marc_s
4个回答

7

正如你自己所说,.FirstOrDefault()将返回一个NULL值,因此你需要首先检查是否为NULL,只有在它不是NULL时才能访问其.location_key属性:

int? locationId = null;

var firstOrDefault = _ctx.m_locations.FirstOrDefault(l => l.name.ToLower() == countyOrTown.ToLower());

if(firstOrDefault != null)
    locationId = firstOrDefault.location_key;

4
为什么会出现“Sequence contains no elements”而不是“NullReferenceException”,这并没有得到解释。 - Kirk Woll

1

您意识到您正在尝试在一个可能为空的对象上调用“location_key”属性,对吗?


0

你确定它抛出的是“Sequence contains [...]”而不是空异常吗?

如果你的查询确实返回了“default”(或者在这里是null),那么你的代码将会抛出:

(null).location_key


0

首先,为null参考测试'm_locations'和'countyOrTown'!您可能没有实例化对象。

此外,(您可能已经执行了此操作),您应该验证'countyOrTown'不包含空字符串,并且数据中没有拼写错误,导致无法匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接