从列表中删除项目

时间:2014-03-31 14:19:42

标签: c# asp.net asp.net-mvc

为什么我不能选择删除或删除?我想从列表中删除记录

IEnumerable<StockLocation_Table> AllCurrentStocklocations = db.StockLocation_Table.ToList();
List<StockLocation> StockLocations = ServerHelper.GetStockLocationsBatch(BatchUrl, i, batchSize);

foreach (StockLocation_Table _stock_table in AllCurrentStocklocations)
{
    foreach (StockLocation _stock in StockLocations)
    {
        if (_stock.ServerLocationId == _stock_table.ServerLocationId)
        {
            AllCurrentStocklocations.?? why cant i say remove._stock_table 
        }
    }
}

2 个答案:

答案 0 :(得分:2)

因为它是IEnumerable<T>Remove方法未在IEnumerable<T>中定义。由于您使用ToList,只需使用List<T>作为类型:< / p>

List<StockLocation_Table> AllCurrentStocklocations = db.StockLocation_Table.ToList();

编辑:你也无法修改 foreach 循环中的集合。你可以改用LINQ:

var AllCurrentStocklocations = db.StockLocation_Table
                    .Where(x => !StockLocations
                    .Any(s => s.ServerLocationId == x.ServerLocationId).ToList()

答案 1 :(得分:2)

您要在此处执行的操作是从数据库表中获取ID不在此列表中的所有项目。你应该在这里做的是构造一个查询,这样你只得到那些没有这些ID的项目,而不是将整个数据库表拉入一个列表,然后通过另一个列表获取每个项目)查找ID,以便您可以从此列表中删除当前项。除了 super 效率低之外,这还意味着从正在迭代的集合中删除项目,这将破坏迭代器。而是写一些可以翻译成数据库查询的东西:

List<StockLocation> stockLocations = ServerHelper.GetStockLocationsBatch(
    BatchUrl, i, batchSize);
var locationIDs = stockLocations.Select(location => location.ServerLocationId);
db.StockLocation_Table.Where(item => 
    !locationIDs.Contains(item.ServerLocationId));