处理“Sequence has no elements”异常

88

我在更新购物车中的数量时遇到了“Sequence has no elements”异常。

但我不知道这意味着什么。起初,我以为可能是传递了空值,但实际情况并非如此,因为我已经检查过了:

序列中不包含元素 描述:当前 Web 请求的执行期间出现未处理的异常。 请查看堆栈跟踪以获取有关该错误以及代码中起源位置的更多信息。

异常详细信息:System.InvalidOperationException: 序列中不包含元素

源错误:

第35行:var uid = WebSecurity.CurrentUserId; 第36行: var newqty = Request.Form["Quantity"]; 第37行:
OModel.Cart c = (from item in database.Carts 第38行:
where item.UserId == uid && item.PartNumber == pnumber && item.OrderId == oid 第39行: select item).First();

有任何想法会导致这种情况发生吗?

6个回答

161

First()如果你的查询返回0行,会导致这个问题。你要么捕获该异常,要么使用FirstOrDefault(),它会在没有元素的情况下返回null


18
你正在使用LINQ的First()方法,根据文档,如果你在一个空集合上调用它,会抛出InvalidOperationException异常。
如果你预期查询结果有时可能为空,你可能想使用FirstOrDefault(),它会在集合为空时返回null,而不是抛出异常。

7

.First()改为.FirstOrDefault()

。这样做可以避免在序列为空时抛出异常。


2

解决VB中“Sequence has no elements”异常的部分方法是测试是否为空。

If Not (myMap Is Nothing) Then
' execute code
End if

当查询序列为空/为null时,返回“我的地图”(MyMap)序列。FYI。


1
值为null,你需要检查原因... (除了实施这里提出的解决方案)
检查硬件连接。

0
我也遇到了同样的问题,但我没有使用First(),而是使用了ToListAsync()。我的问题在于我没有将实体类中的属性设置为public。将它们设置为public解决了我的问题。
之前:
string name {get; set;}

之后:

public string name {get; set;}

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