删除包含多个匹配项的列表中的一个项目

时间:2013-06-19 13:48:24

标签: c# asp.net-mvc list

在我的应用程序中,我有一个包含这些项目列表的类:

public class Order
{
    (...)
    public List<OrderDetailInfo> mListOrderDetail { get; set; } 
}

订单详情如果形状如此:

public class OrderDetailInfo
{
    public int mOrderDetailID { get; set; }
    public int mOrderDetailName { get; set; }
    (...)
}

在我的应用程序的某个地方,我必须填写此列表中的空白内容。所以我创建了一堆“false”orderDetails对象,它们都具有相同的id:9999.我这样做是因为这个订单需要稍后确认。

确切地说,当确认此订单时,我需要根据用户的输入删除一定数量的项目,并将其替换为他创建的其他项目。所以我试着这样做:

for (int i = 0; i < _itemQuantity; i++)
{
    var emptyJug = order.mListOrderDetail.SingleOrDefault(
            _item => _item.mInventoryID == 9999);

    order.mListOrderDetail.Remove(emptyJug);
}

但是当“var emptyJug”行被命中时,该行会崩溃,因为可能会发生很多次。我需要从列表中删除一个emptyJug单元,直到达到_itemQuantity。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

致电FirstOrDefault SingleOrDefault FirstOrDefault()

SingleOrDefault()适用于预计集合中存在零个或多个结果的情况。如果有多个结果,则调用此方法将返回第一个项目,如果没有,则返回Default。

{{1}}适用于输入集合中预期为零或一个结果的情况。如果只有一个结果,则调用此方法将返回一个结果,如果没有结果,则返回默认值;如果有多个结果,则返回异常。

答案 1 :(得分:1)

尝试使用“FirstOrDefault”而不是“SingleOrDefault”。